我正在尝试为第 3 方控件构建一系列处理程序。内部必需的对象之一是回调处理程序。问题是调用 allProvider(item) 时,“theValue”变量不再指向同一位置 - 它始终设置为分配给它的最后一个值。我真正想做的是在构建数组时立即评估“theValue.name”,而不是稍后。目前我对任何解决方案持开放态度。谢谢
var handlers = [];
for(var i=0;i<myArray.length;i++){
var theValue = myArray[i];
handlers.push({
name: myArray.name,
allProvider: function(item){
return "All "+ theValue.name; //This always == myArray[myArray.length - 1]
}
});
}
最佳答案
那里有一个闭包 - theValue
是对父作用域变量的引用,当该函数执行时,它指向最后分配给它的值。
You need to break the closure 。常见的模式是使用 IIFE。
allProvider: (function(theValue) {
return function(item) {
return "All "+ theValue.name;
}
})(theValue)
关于javascript - 构建匿名函数时预评估对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27894939/