Javascript 防止运行时评估

Javascript 防止运行时评估,javascript,Javascript,假设我有这个代码 var callbacks = {}; for (var i in mylist){ callbacks[i] = { callback: function(){ myFunction( myList[i].someProperty ); }}; } 上面的代码会导致出现如下列表: myList[0].property = "zero"; myList[1].property = "one"; callbacks[0].callback // -> returns

假设我有这个代码

var callbacks = {};
for (var i in mylist){

callbacks[i] = { callback: function(){ myFunction( myList[i].someProperty ); }};

}
上面的代码会导致出现如下列表:

myList[0].property = "zero";
myList[1].property = "one";
callbacks[0].callback // -> returns myFunction("one"); WRONG!
callbacks[1].callback // -> returns myFunction("one");
这样的结果:

myList[0].property = "zero";
myList[1].property = "one";
callbacks[0].callback // -> returns myFunction("one"); WRONG!
callbacks[1].callback // -> returns myFunction("one");

我能做些什么(
for..in
循环和中的,而不改变我访问
myList[I]的事实。匿名函数内部的someProperty
)来确保
myList[I]的值.someProperty
是在循环期间分配的,而不是在执行函数时分配的?

您可以在回调上设置
属性,然后参考
此键。

var myList = {
    foo: {
        someProperty: 'oof'
    },
    bar: {
        someProperty: 'rab'
    }
};

var callbacks = {};
for (var i in myList) {
    callbacks[i] = { 
        key: i, //Add a key property
        callback: function(){ 
            myFunction( myList[this.key].someProperty ); 
            // And refer to    ^^^^^^^^
        }
    };
}

function myFunction(propertyValue) {
    console.log(propertyValue);
}

callbacks['foo'].callback(); //oof
callbacks['bar'].callback(); //rab

我已经遵循了这个问题的答案,我已经解决了这个问题。谢谢你的发帖,很抱歉:我不知道这是一个“结束”,所以我不知道如何开始我的搜索;我很高兴你能用那个复制品来解决你的问题。您还应该知道,至少您有一个很好的伙伴:大约。很好,手动构造一个范围对象:-)