关于js的易错知识

Posted 兜里还剩五块出头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于js的易错知识相关的知识,希望对你有一定的参考价值。

1 var arr = [];
2  for(var i = 0;i<2;i++){
3      arr[i]=function(){
4          console.log(i);//这里由于内部没有定义i,根据函数链它会往上一层寻找最近的作用域下的i
5      }
6  }
7  arr[0]();
8  arr[1]();

上述输出的都是2。

为什么呢?其实上述的操作是给aar数组添加了两个函数,所以自然可以用数组加下标和()执行函数。

易错点是人们常常以为第一个输出的是0,第二个函数输出的是1.

但是由于函数执行是自上而下的,函数运行到7,8行时,上面的变量i,已经变成了2,所以都是2.

 

但是我想说的是,这里的i是var定义的,当用let定义的时候将会完全不一样。

1 let arr1 = [];
2  for(let i = 0;i<2;i++){
3      arr1[i]=function(){
4          console.log(i);//这里由于内部没有定义i,根据函数链它会往上一层寻找最近的块级作用域下的i
5      }
6  }
7  arr1[0]();
8  arr1[1]();

输出的结果会是0,1

 

主要原因是let的块级作用域的影响,for函数每次执行都会产生一个块级作用域,每个块级作用域中的变量i都不是同一个i,函数执行时是自己上一级作用域下i的值。

以上是关于关于js的易错知识的主要内容,如果未能解决你的问题,请参考以下文章

Python语言基础知识的易错点和易遗漏点

Java代码实际应用中的易错点记录

[笔试题]sizeof系列面试题中的易错之处

Python,我的易错点

java基础中的易错点

写程序的易错点(不定期更新)