This question already has answers here:
JavaScript closure inside loops – simple practical example
(44个回答)
5年前关闭。
我正在尝试为第三者控件建立处理程序数组。内部所需的对象之一是回调处理程序。问题在于调用了allProvider(item),“ theValue”变量不再指向同一位置-它始终设置为分配给它的最后一个值。我真正想做的是在构建数组时立即评估“ theValue.name”,而不是稍后。目前,我愿意接受任何解决方案。谢谢
(44个回答)
5年前关闭。
我正在尝试为第三者控件建立处理程序数组。内部所需的对象之一是回调处理程序。问题在于调用了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/
10-12 13:49