2017-04-02 4 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

であるが、第2のブロックで、私は9です。

なぜ私は本当に理解できないのですか?

+0

http://2ality.com/2015/02/es6-scoping.html#letである理由9に、それはだと設定します-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); 
} 
関連する問題