javascript - 如何传递仅在回调创建时存在的参数

标签 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])
    }
}

myObj在 for 循环结束后单击会触发错误:

TypeError: arr[i] is undefined

有什么方法可以强制在绑定(bind)回调函数时传递参数的值吗?

最佳答案

尝试 IIFE:

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

问题是点击事件在整个循环完成后触发 - 所以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]);
    });
}

关于javascript - 如何传递仅在回调创建时存在的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56719357/

相关文章:

javascript - 为什么我的 Jquery 元素大小调整不起作用?

ruby-on-rails - Ruby 从多维数组中提取数组

php - 拉维尔 5.1 : Command error [Error exception] Illegal offset type

c# - 如何根据C#中矩形数组中的特定值检查特定单元格的周围单元格

javascript - 如何向 .apply() 方法添加回调?

javascript - javascript 中的乘法错误

javascript - 发送声音垃圾邮件

javascript - AngularJS 访问 $http 之外

javascript - 删除重复的错误处理代码Node.js

javascript - 如何防止触发传入 javascript 函数的回调