![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaScript
文章平均质量分 66
无知的圆
这个作者很懒,什么都没留下…
展开
-
深入理解 JS 闭包的 9 大使用场景
文章目录深入理解 JS 闭包的 9 大使用场景1 返回值(最常用)2 函数赋值3 函数参数4.IIFE(自执行函数)5 循环赋值6 getter和setter7.迭代器(执行一次函数往下取一个值)8 首次区分(相同的参数,函数不会重复执行)9 缓存参考文章深入理解 JS 闭包的 9 大使用场景1 返回值(最常用) //以闭包的形式将 name 返回。function fn(){ let name = "hello" return function(){原创 2021-09-20 10:28:55 · 550 阅读 · 0 评论 -
【奇怪的输出题】对象引用的问题
题目如下:var a = {n: 1};var b = a;a.x = a = {n: 2};console.log(a.x) console.log(b.x)答案是:undefined{n:2}解析:首先:a和b同时引用了{n:2}对象然后执行a.x = a = {n: 2}语句,尽管赋值是从右到左的但.的优先级比=高,所以这里会先执行a.x,相当于为a所指向的对象{n:1}新增了一个属性x然后执行a={n:2},相当于改变了a的指向,a不再指向对象{n:1},而原创 2021-08-20 21:16:25 · 206 阅读 · 0 评论 -
【记面试遇到的坑】 对象使用数组的push方法后会发生什么?
奇怪的面试题最近碰到一道奇奇怪怪的面试题,对象使用数组的push方法后会发生什么?题目如下:var obj = { '2':3, '3':4, 'length':2, 'splice':Array.prototype.splice, 'push':Array.prototype.push}obj.push(1) obj.push(2) obj.push(3) console.log(obj);求最后打印出的的obj是什么?答案是:{ '2原创 2021-08-19 19:12:46 · 540 阅读 · 0 评论 -
JS常用的循环遍历和它们的特性
目录JS常用的循环遍历for、forEach、for ...of for…insome everyfilter、mapfind、findIndexreduce、reduceRight参考文章JS常用的循环遍历for、forEach、for …of for…infor通常用于数组的循环 可以随时跳出循环,用break或者continueconst list = [1, 2, 3, 4, 5, 6, 7, 8, , 10, 11];let len = list.length;for原创 2021-08-19 12:07:26 · 390 阅读 · 0 评论 -
ES6中展开运算符(...)的几种使用场景
ES6中展开运算符(…)的几种使用场景解构赋值数组的解构赋值:const [arg, arg1, ...arg2] = ['a', 'b', 'c', 'd']console.log(arg);console.log(arg1);console.log(arg2);//a//b//[ 'c', 'd' ]数组中按顺序匹配,将’a’赋值给arg,'b’赋值给arg1,剩下的元素以数组形式赋值给展开运算符作用的变量。对象的解构赋值:明确指出的赋值名字要相对。比如const中的a和b原创 2021-08-06 10:15:37 · 478 阅读 · 0 评论 -
JavaScript继承的方式
目录JavaScript继承的方式1 原型链继承2 借用构造函数实现继承3 组合继承(最常用)4 原型式继承5 寄生式继承6 寄生组合式继承JavaScript继承的方式一共六种方式原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承。这部分可以看红宝书第四版P238-2491 原型链继承 function Animal(){ this.colors = ["black","while"]; } Animal.prototype.ge原创 2021-08-01 20:13:12 · 191 阅读 · 0 评论 -
setTimeout()的参数问题
setTimeout()的参数问题执行时间setTimeout()方法接收两个参数,第一个参数可以是包含JavaScript代码的字符串,或者是一个函数。第二个参数表示等待多长时间的毫秒数将当前任务添加到队列中。setTimeout(“go()”, 1000); //等待1000毫秒执行go函数setTimeout(go, 1000); //等待1000毫秒执行go函数setTimeout(go(), 1000); //立即执行go函数,这种情况会忽略后面的等待时间带引号原创 2021-07-29 20:49:22 · 1762 阅读 · 0 评论 -
JavaScript变量提升的坑
var ,未定义,letvarconsole.log(a)var a = 10结果:原因:上面代码在编译阶段变成了下面代码,可以看到var a = 10在编译阶段变成了两句话,一句为声明变量:var a,一句为给变量赋值: a=10。而声明变量提升到了当前作用域(全局作用域)的最前面,赋值变量的语句留在原地。由于变量a在输出前只声明而未定义,所以会输出undefined,而不是报错,也不是输出10。var aconsole.log(a)a = 10未定义console.l原创 2021-07-23 15:39:48 · 228 阅读 · 1 评论