我想将参数传递给 for 循环内的回调函数。问题是在for循环结束后调用回调,然后参数不再存在。
请参阅以下代码片段:
function foo(x){
console.log(x)
}
for(var i = 0; i < arr.length; i++) {
var myObj = customObject()
myObj.on('click', function(){
foo(arr[i])
}
}
myObj
在 for 循环结束后单击会触发错误:
TypeError: arr[i] is undefined
有什么方法可以强制在绑定(bind)回调函数时传递参数的值吗?
最佳答案
尝试 IIFE:
myObj.on('click', function() {
(e => foo(e))(arr[i]);
});
问题是点击事件在整个循环完成后触发 - 所以i
是arr.length
,没有传递循环中的条件语句,因此 arr[i]
未定义。
您还需要使用 let
来代替:
for (let i = 0; i < arr.length; i++) {
let myObj = createObject();
myObj.on("click", function() {
(e => foo(e))(arr[i]);
});
}
关于javascript - 如何传递仅在回调创建时存在的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56719357/