javascript - 构建匿名函数时预评估对象值

标签 javascript

我正在尝试为第 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/

相关文章:

javascript - 如何将突出显示的导航项更改为蓝色背景而不是移动 View 中的蓝色边框底部

javascript - HTML5 富应用程序 : a way to deliver printable reports

javascript - 未定义的 Angular 2 的“reflectionCapability”

javascript - ng-repeat 与动态 ng-include 和模板变量范围问题

javascript - 我想在每次点击时隐藏和显示一个 div

javascript - 从 javascript 对象中删除一行

JavaScript:将 <p> 标签之间的文本转换为 <p> 标签之间的新文本(输出)

javascript - 如何使用 Javascript 检测用户是否为 "idle"?

javascript - 设置可以选择的复选框的数量限制

javascript如何在服务器上打开一个exe文件