2017-04-02 85 views
2

我真搞不清楚这个代码让用Javascript。混乱

var box = document.getElementsByClassName('box-value'); 
 

 
for(let i = 0; i < box.length; i++){ 
 
    box[i].onclick = function(){ 
 
     console.log(i); 
 
    } 
 
    console.log("End loop. i:" + i); 
 
} 
 

 
let i = 0; 
 
box[i].onclick = function(){ 
 
    console.log(i); 
 
} 
 
i = 9; 
 

 
box[0].onclick();

enter image description here

在第一个块,我是0

enter image description here

但在第二块,我是9.

我真的不明白为什么?

+0

http://2ality.com/2015/02/es6-scoping.html#let -in-loop-heads – melpomene

+0

@trincot我不认为重复适用于这里 – Bergi

+1

你不了解哪一部分?你会期望什么日志? – Bergi

回答

2

因为你的第一个i处于doesn't get changed afterwards,而你的第二个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); 
}