【发布时间】:2016-11-02 06:39:43
【问题描述】:
在documentation for the let statement in MDN,有这个示例代码:
var list = document.getElementById("list");
for (let i = 1; i <= 5; i++) {
let item = document.createElement("li");
item.appendChild(document.createTextNode("Item " + i));
item.onclick = function (ev) {
console.log("Item " + i + " is clicked.");
};
list.appendChild(item);
}
然后他们说:
上面的示例按预期工作,因为 (匿名)内部函数是指五个不同的实例 变量 i.
我不明白为什么会有“变量i 的五个不同实例。
for 循环中的第一条语句总是执行一次,不是吗?
所以let 语句应该只执行一次...
一旦代码到达迭代的结尾,它就会检查第二条语句中的条件。
怎么会,根据他们写的,每次迭代都有一个i 的新实例?
【问题讨论】:
-
不是你要的,但我上周碰巧测试了这种行为,发现 IE 没有正确实现它。 (Chrome 做到了。)
-
在 ECMA 6 规范中,当使用 let 表达式时,每次迭代都会创建一个新的词法范围,链接到前一个范围。 ecma-international.org/ecma-262/6.0/…
-
要理解这一点,请将
let更改为var并查看单击循环创建的元素时会发生什么 -
第一条语句只执行一次,但我相信第三条语句(I++)等于
let i = i + 1,它执行了四次……对吗? -
@Jamiec,我了解发生了什么,但不完全是为什么。
标签: javascript for-loop let