以下のコードは、期待どおりに動作します。setTimeoutが期待通りに機能しないForループ
var mySelector = document.querySelectorAll('.mySelector');
var myFunction = function() {
for (var i = 0; i < mySelector.length; i++) {
mySelector[i].classList.add('myClass');
}
}
しかし、このコードはエラーが発生:「キャッチされない例外TypeError:プロパティを読み取ることができません 『をCLASSLIST』未定義の」
var mySelector = document.querySelectorAll('.mySelector');
var myFunction = function() {
for (var i = 0; i < mySelector.length; i++) {
setTimeout(function(i){
mySelector[i].classList.add('myClass');
}, 1000);
}
}
私はそれがある理由は非常に簡単な説明があります確信しているが、私はそれを知らない。
なぜですか?
UPDATE:setTimeout関数から削除パラメータを使用して新しいコード
var mySelector = document.querySelectorAll('.mySelector');
var myFunction = function() {
for (var i = 0; i < mySelector.length; i++) {
setTimeout(function(){
mySelector[i].classList.add('myClass');
}, 1000);
}
}
UPDATE 2:私はそれが一般的にあることを認めるJavaScript closure inside loops – simple practical example
:
Barmarが、これは別の質問の正確な複製ことを示唆しましたBarmarとリンクされた答えはおそらく私が直面している苦境よりも多くのJavaScript経験を持つ人を助けることができます。しかし、私の質問は、以下の理由から、それ自身の条件で開いたままにするには十分に異なると思います。(1)私のケースは簡単で正解は自分自身のような熟練したJavaScript実践者にとって利益をもたらすだろう。 forループに関連するsetTimeoutに関係します。また、私は、Barmarが参考にした答えが多くの人に役立つことを認めますが、個人的にはそれほど役に立ちません。
それは暗闇の中でのショットだったので申し訳ありませんが、私は私の答えを削除します。私はJavascriptを書いて以来、しばらくしてきました。 – Carcigenicate