-1
私はJavaScriptのforループに遅延を設定しようとしています。私はそれがi
を記録し、遅れていて、次にi
のようにログを記録したいと思います。私の質問は、なぜ次のコードは以下から分かるように関数が関数を返した、仕事んされています。期待通りを動作しませforループ内のsetTimeout
for (var i = 1; i <= 5; i++) {
var tick = function(i) {
return function() {
console.log(i);
}
};
setTimeout(tick(i), 500 * i);
}
し、次のコード:
for (var i = 1; i <= 5; i++) {
var tick = function(i) {
return console.log(i);
};
setTimeout(tick(i), 500 * i);
}
forループのすべての値を一度に出力します。誰かがなぜこれが起こるか説明してもらえますか?コードの両方の部品で
setTimeoutの最初の引数は、関数でなければなりません。関数を呼び出す結果ではありません。ただし、firs関数の呼び出し結果は関数そのものです –
'let'に' var'をスイッチします – Endless
@Endless - 2番目のコード例はタイムアウト後に 'undefined'を呼び出そうとします –