でコピーされた整数の変数は、私はC#の開発者とクロージャは、C#での作業方法に使用されています。 は現在、私は匿名のjavascript機能と連携し、次のコードに問題が発生したする必要があります。アクセスはjavascriptの匿名メソッド
function ClosureTest() {
var funcArray = new Array();
var i = 0;
while (i < 2) {
var contextCopy = i;
funcArray[i] = function() { alert(contextCopy); return false; };
i++;
}
funcArray[0]();
funcArray[1]();
}
私は0
を言うために最初funcArray()
コールと1
を言うために秒を期待しています。しかし、彼らはともに1
と言う。そんなことがあるものか?
var contextCopy = i
を書くことによって、i
のコピーを作成することを確認します。次に、各反復で、私は全く新しい関数ポインタを作成します。各関数は、という独自のコピーi
を参照します。ただし、何らかの理由で作成された関数は、同じcontextCopy
-variableを参照しています。
JavaScriptで、このしくみを教えてください。彼らはC#でそうであるようにJavaScriptで
あなたは 'for'ループを使用していない理由はありますか?ノーそこ – zzzzBov
contextCopy変数の巻き上げを指摘していない;-) – TwinHabit