首页 > 解决方案 > 如何传递仅在回调创建时存在的参数

问题描述

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

有没有办法在绑定回调函数时强制参数按其值传递?

标签: javascriptarrayscallbackparameter-passing

解决方案


尝试 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]);
    });
}

推荐阅读