私は JavaScript を初めて使用し、配列 myElements[] 内のさまざまな DOM 要素に一意の onclick ハンドラーを割り当てようとするこのコードの動作を理解しようとしています。
(function handleClicks(){
for (var i = 0; i < 100; ++i) {
myElements[i].onclick = function() {
alert( 'You clicked on: ' + i );
};
})();
私の理解では、DOM要素がクリックされるたびに、関数が完了するとjavascriptが私が持っている値を使用するため、ブラウザーは「100をクリックしました」と警告する必要があります
2 つの質問があります。
- 関数handleClicks () 内にスコープしかない場合、関数が完了するとブラウザーはどのようにアクセスできますか?確かに私はもう存在しませんか?
- 配列に2つのHTML要素を入れて、このコードを試しました
var myElements = [];
myElements.push( document.getElementById('1');
myElements.push( document.getElementById('2');
http://jsfiddle.net/branmong/fS7qE/
しかし、プログラムが実行されると、クリックされた要素ごとに 'you clicked on: 2' というアラートが表示されます。
「あなたがクリックした場所: 100」というアラートが表示されないのはなぜですか。関数の実行が終了したら、これは確かに i の値なのでしょうか?