var a = [];
for(var i=0; i<10; i++){
a[i] = function(){
console.log(i);
};
}
a[6]();
上述代码浏览器运行后输出结果:10 。问题一:此处为啥是10而不是6呢?
"use strict";
var a = [];
for(let i=0; i<10; i++){
a[i] = function(){
console.log(i);
};
}
a[6]();
上述代码(即使用es6的语法)浏览器运行后输出结果:6 。问题二:此处为啥是6而不是10了呢?
前面有几位仁兄热情回答,可是我还是心有疑惑。有木有大神能用通俗易懂的语言解答下呢?
问题一:第一个结果的产生中间涉及到作用域链和闭包这两个概念,具体解释恕我不能详细介绍,题主可以按图索骥找相关的资料,推荐《JavaScript高级程序设计第二版》。
问题二:至于第二个结果中的let命令就是ECMAScript2015(简称ES6)用来解决第一种情况下产生的不好的影响。然后就是刚才测试了一下去掉格式限制在FF无影响。
BTW,这段代码好像阮老师书里的一段内容,里面其实有详细的解释,地址:http://es6.ruanyifeng.com/#docs/let