for (var i = 0; i < 5; i++) {
var btn = document.createElement('button');
btn.appendChild(document.createTextNode('Button ' + i));
btn.addEventListener('click', function(){ console.log(i); });
document.body.appendChild(btn);
}
在上面的代码中 - 无论按下什么按钮,输出总是5,因为我在js中理解它是通过referene,当循环完成时,最终值将更新为'i' - 但是1我有的问题是为什么5 - 我认为它是4 - 一旦i的值为4,它不应该从循环出来吗?我是否因为'for'循环而错过了一些理解?
答案 0 :(得分:0)
你的问题不是关闭,而是关于循环,对吧?闭包是一个不同的故事,但循环是直截了当的 - 它在检查它是否通过条件之前执行增量步骤:
订单是:
i
初始化为0 i < 5
(是)i
增加到1 i < 5
(是)i
增加到2 i < 5
(是)i
增加到3 i < 5
(是)i
增加到4 i < 5
(是)i
增加到5 i < 5
(不是)