在看阮老师的ECMAScript 6 入门 时遇到了这个问题。先贴代码 :
var a = [];for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10
不理解为什么是10,书中是这样解释的。
变量i是var声明的,在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值。
先假设是覆盖了,那为什么是10,为什么不是9, 不是 i < 10 吗?
还有这个let的用法
var a = [];for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 6
let声明 i , 就得到了6,这是为什么啊?书中是这样解释的。
变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。
整理下问题 :
1.用var声明的为什么结果是10,就算不是6,也该是9啊,因为循环是从0-9.
2.用let声明的为什么是6?
梵蒂冈之花
相关分类