我想将参数传递给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])
}
}
在for循环结束后点击 myObj
会触发错误:
TypeError: arr[i] is undefined
在绑定回调函数时,是否有任何方法可以强制参数通过其值传递?
答案 0 :(得分:1)
尝试IIFE:
myObj.on('click', function() {
(e => foo(e))(arr[i]);
});
问题在于,整个循环结束后会触发click事件-因此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]);
});
}