我正在编写一个代码,我必须将一个不同的函数传递给某些对象。
在这种情况下,我正在尝试为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;
}
我认为这里的问题是我担心它会在声明时执行代码而不是实际变量的值。
有没有办法在执行时传递带有值的函数?或者变量会以其编写的方式解析吗?
答案 0 :(得分:1)
这是循环问题中的经典函数。您需要了解关闭的工作原理。
仔细阅读this answer的“示例3”部分。整个How do JavaScript closures work?问题也是如此。
另一个可能有助于直观理解的例子:
var key = 5;
var onchange = function () {
console.log(key);
};
onchange(); // 5
key = 10; // the loop reassigns the key on each iteration
onchange(); // 10
答案 1 :(得分: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))
}