假设我有这段代码
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");
我能做些什么({{1>} 循环中的和而不会改变我在匿名函数中访问for..in
的事实 )确保在循环期间分配myList[i].someProperty
的值而不是在执行函数时分配值?
答案 0 :(得分:1)
您可以在回调中设置key
属性,然后参考this.key
:
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