1
基本的な問題が発生したときにいくつかのテストを書きました。私はテストフレームワークの裸のスケルトンを書いた。まず、すべてのテスト(コールバック)を配列で収集し、後で別のループでそれらを実行します。node.jsコールバックの参照
最後の配列の最後の要素に割り当てられているとされてきたコールバック「V」に意味> node test.js
d=(text1)
d=(text2)
v=(2), i=(2)
v=(2), i=(2)
「私は」に:私はこのサンプルを実行する場合ただし、これは
//test.js
var testArray = [
{
n : 1,
d : 'text1'
},
{
n : 2,
d : 'text2'
}
];
var cbs = [];
function fnWithCallback(d, cb) {
console.log('d=('+d+')');
cbs.push(cb);
}
for(var i=0; i < testArray.length; i++) {
var v = testArray[i];
fnWithCallback(v.d, function() {
console.log('v=('+v.n+'), i=('+i+')');
});
}
for(var j=0; j < cbs.length; j++) {
cbs[j]();
}
私はこれを取得しますコールバックが '作成され'、 'fnWithCallback'関数に渡されたときではなく、最後の状態です。ただし、 'd'はコールバック内に出力されるため、 'fnWithCallback'が呼び出されたときに要素の値が返されます。
"Unlooping" ループは役立ちません。
var v = testArray[0];
fnWithCallback(v.d, function() {
console.log('v=('+v.n+')');
});
v = testArray[1];
fnWithCallback(v.d, function() {
console.log('v=('+v.n+')');
});
も同様の結果になります。
誰かがこれを説明し、解決策を提供することはできますか?
完全に正常に動作します、ありがとう!他の読者には欠けている ')' - それは}})(v、i))));最後の行で – forste
whoops ..固定それ;-) – micha
ちょうど短い説明(または読書へのリンク)を与えることができますか?クロージャーに値渡しされた値です、クロージャーではなぜ機能しますか? – forste