Javascript を学習していて、これら 2 つの機能が異なる理由がわかりません。この例を見ました(関数に名前を追加しました):
var txt = ["a","b","c"];
for (var i = 0; i < 3; ++i ) {
setTimeout((function myBind(msg) {
return function myAlert() { alert(msg); }
})(txt[i]), 1000);
}
alert を呼び出す関数が返されていることがわかります。だから私は考えました、なぜそれを直接返さないのですか:
var txt = ["a","b","c"];
for (var i = 0; i < 3; ++i ) {
setTimeout( function() { alert(txt[i]);} ,1000);
}
これにより、「未定義」のアラートが発生します。1秒後にループが終了し、iが3に設定されたため、txt [3]にアクセスしようとしていることが原因であることは理解していますが、元のセットアップでこの問題をどのように回避したかはわかりません。