私はクロージャーに関しては概念的には手応えがありますが、私はかなり理解できない問題が生じました。クロージャに関する匿名のJavaScript関数定義の理解
それが戻るとき、これは許されていないよう最外関数の最後の値に結合することなく内部関数へのいくつかの値を渡す機能を作成する:
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
function (x) { // this anonymous function definition...
var item = 'item' + list[x];
result.push(
return function() {
console.log(item + ' ' + list[x]);
};
);
}(i); // and simultaneous invocation...
}
return result;
}
一方私が移動した場合完全にコール内部の閉鎖は、すべてが正常にうまくいく)(.pushします
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
result.push(
function (x) { // wrapper now inside the call to .push()
var item = 'item' + list[x];
return function() {
console.log(item + ' ' + list[x]);
};
}(i) // and called here...
);
}
return result;
}
私は思ったんだけどは次のとおりです。どのようなルール私は違反しています私は、forループ内ですぐに閉鎖をラップ匿名関数を定義するとき.push()の呼び出しの中ではなく、 ?最初のケースで
'result.push(リターン機能が動作することはありません' ...、それは閉鎖して行うことはありません;。リターンは声明で、ステートメントは無効ですので、それはdidnの場合でも、あなたがpush()でエンディングセミを持つことはできないので、最初のコードにいくつかの問題があります。 – dandavis
"* this doesn – Amit
*「正常に動作する」*を定義する。予想される動作は何ですか?どのようにそれぞれ異なるのですか? –