阻止运行时评估
Prevent runtime evaluation
假设我有这段代码
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");
我能做些什么(在for..in
循环中,并且不改变我在匿名函数内部访问myList[i].someProperty
的事实)来确保myList[i].someProperty
的值是在循环期间分配的,而不是在执行函数时分配的?
你可以在回调上设置一个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
相关文章:
- 使用压缩的JavaScript文件(不是运行时压缩)
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- http.listen()在运行时接受终端命令
- 自定义运行时Can'在谷歌应用引擎中看不到我的自定义日志
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- JavaScript运行时是如何工作的
- 在运行时创建元素时移到一边时出错
- 如何在运行时在HTML5画布中绘制正方形
- 如何在运行时使用javascript隐藏图像
- 在运行时使用jquery准备表体会导致设计问题
- 使用主题运行时portlet liferay时出现Javascript错误
- JavaScript运行时事件循环现有技术
- Appcelerator Titanium:在运行时下载并解释JavaScript代码
- angularjs ng点击运行时标记不起作用
- 在函数运行时显示对话
- 如何在javascript中在运行时获取对象/数组
- 阻止运行时评估
- 从命令行评估JavaScript文件的运行时/加载错误