让我们输入Javascript。混乱

让我们输入Javascript。混乱,javascript,ecmascript-6,Javascript,Ecmascript 6,我真的很困惑这个代码 var-box=document.getElementsByClassName('box-value'); for(设i=0;i

我真的很困惑这个代码

var-box=document.getElementsByClassName('box-value');
for(设i=0;i框[0]。onclick(),因为第一个
i
在块和中,而第二个
i
(不在块中)和在运行单击处理程序之前设置为
9
。您可以通过执行以下操作来模拟循环中的行为

{
    let i = 0; // one variable that stays constant
    box[i].onclick = function(){
        console.log(i);
    };
}
let i = 9; // a different variable
您还可以通过将作用域置于循环中来模拟赋值的变化行为:

let i = 0;
for(; i < box.length; i++) {
    box[i].onclick = function() {
        console.log(i);
    };
    console.log("End loop. i:" + i);
}
设i=0;
对于(;i
for
循环中使用
let
声明的
i
在循环结束后将不存在。第二个
i
是独立的,您可以将其设置为9,这就是第二个
i
的值为9的原因


@trincot我不认为复制品适用于这里什么部分你不明白?您希望得到什么日志?@Bergi问题不一样,但也包括
for
循环中的
let
。@Bergi,我已经删除了副本。。。以防万一,
let
和block scope的使用在这里值得单独回答。