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 回答