javascript - 如何传递仅在回调创建时存在的参数
问题描述
我想将参数传递给 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
有没有办法在绑定回调函数时强制参数按其值传递?
解决方案
尝试 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]);
});
}
推荐阅读
- opengl - OpenGL3中的虚线?
- java - 使用 Zxing ByQuadrantReader 扫描图像中的多个条形码:Nullpointer
- reactjs - Native Base Linking Issue
- graphql - react-apollo 突变不会重新获取
- python - 如何使用 AWS SDK 重复调用具有从 YAML 文件到 Python 的配对参数列表的函数?
- c# - IdentityServer4 和单独的用户身份验证 API
- nginx - 为什么 Nginx 用这 3 个素数实现 ip_hash 负载均衡方法
- azure - 我的世博分离应用程序构建在 Visual Studio 应用程序中心失败
- html - IE11 中的 HTML 选择菜单问题
- react-native - 无法访问 axios 请求的已加载和正在进行的对象总数事件