0

一部のオブジェクトに別の関数を渡す必要があるコードに取り組んでいます。

この場合、onchange イベントに別の関数を渡そうとしています。だから現在私が得たのは次のようなものです:

var ArrayList; //Contains some data to use with ObjectArray format { n: data }
var ObjectArray; //Contains several objects format Array[n] = Object;
for(var key in ArrayList){
    var doFunction = function() {
        Object[key].doSomething(ArrayList[key]);
    }
    Object[key].onchange = doFunction;
}

ここでの問題は、実際の変数の値ではなく、宣言されたとおりにコードを実行するのではないかと心配していることです。

実行時に関数に値を渡す方法はありますか? または、変数はその記述どおりに解析されますか?

4

2 に答える 2

2

これは、ループ問題における古典的な関数です。クロージャーがどのように機能するかを理解する必要があります。

この回答の「例 3」の部分を注意深く読んでください。全体JavaScript クロージャーはどのように機能しますか? 質問も。

直感的に理解するのに役立つ別の例:

var key = 5;

var onchange = function () {
    console.log(key);
};

onchange(); // 5

key = 10; // the loop reassigns the key on each iteration

onchange(); // 10
于 2012-07-24T19:49:45.080 に答える
1

これはそれが行われるべき方法です:

var ArrayList; //Contains some data to use with ObjectArray format { n: data }
var ObjectArray; //Contains several objects format Array[n] = Object;
for(var key in ArrayList)
{
    (function(key)
    {
        var doFunction = function() 
        {
            Object[key].doSomething(ArrayList[key]);
        }
        Object[key].onchange = doFunction;
    }(key))    
}
于 2012-07-24T20:48:05.777 に答える