【问题标题】:How to pass an argument present only at callback creation [duplicate]如何传递仅在回调创建时存在的参数[重复]
【发布时间】:2019-11-05 05:52:09
【问题描述】:

我想将参数传递给 for 循环内的回调函数。问题是在 for 循环结束后调用回调,然后参数不再存在。

见以下代码sn-p:

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

在绑定回调函数时,有什么方法可以强制参数按其值传递?

【问题讨论】:

  • 什么是myObjcustomObject 是什么? arr 是什么?请在您的问题中添加更多代码。

标签: javascript arrays callback parameter-passing


【解决方案1】:

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

【讨论】:

  • Stack Overflow 上的重复项背后的全部目标是将同一问题的高质量答案保存在一个地方。这个问题已经被问过很多次了,它有一个很好的解释,你有一个欺骗锤来单枪匹马将它标记为重复,但你选择在没有更多信息的情况下回答它,而不是在欺骗目标中找到......它不是我的反对票,但我可以想象这可能是原因。
猜你喜欢
  • 2017-01-18
  • 2013-05-10
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
相关资源
最近更新 更多