2017-04-02 78 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); 
}