如何传递仅在回调创建时出现的参数

时间:2019-06-22 21:38:14

标签: javascript arrays callback parameter-passing

我想将参数传递给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

在绑定回调函数时,是否有任何方法可以强制参数通过其值传递?

1 个答案:

答案 0 :(得分:1)

尝试IIFE:

myObj.on('click', function() {
    (e => foo(e))(arr[i]);
});

问题在于,整个循环结束后会触发click事件-因此iarr.length,没有在循环中传递条件语句,因此arr[i]没有定义。

您还需要改用let

for (let i = 0; i < arr.length; i++) {
    let myObj = createObject();
    myObj.on("click", function() {
        (e => foo(e))(arr[i]);
    });
}