转载

JavaScript 关于 for 循环中的疑问

原文地址: http://www.barretlee.com/blog/2015/09/30/confusion-about-for-loop-var/

JavaScript 关于 for 循环中的疑问

我一直都没搞明白,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… }

显得十分别扭!到底是啥样的呢?好疑惑。

正文到此结束
Loading...