原文地址: http://www.barretlee.com/blog/2015/09/30/confusion-about-for-loop-var/
我一直都没搞明白,for 循环的 var
声明是怎么使用的。
for(var i = 0; i < len; i++ ) {
// code…
}
最后的结果是这样?
{var i = 0; // code… }
{var i = 1; // code… }
{var i = 2; // code… }
还是这样:
var i;
{i = 1; // code… }
{i = 2; // code… }
{i = 3; // code… }
但是根据 ES6 中 let 关键词的例子:
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[2](); // 2
let 只能在 block 块中生效,可以推测,应该是第一种方式解析,我们知道 var
会被提升(hoisting),所以第一种方式应该是:
var i;
{var i = 0; // code… }
{var i = 1; // code… }
{var i = 2; // code… }
显得十分别扭!到底是啥样的呢?好疑惑。