繁体   English   中英

JavaScript 闭包和作用域:如何将外部作用域变量传递给作为参数传递的回调函数?

[英]JavaScript closures and scoping: How to pass an outer scope variable to a callback function which is passed as an argument?

我的代码是这样的:

im.size((function(a, b) {
  console.log(b);
  console.log(im);
})(im));

对象 im 有一个函数大小,它需要一个回调函数。 它将参数 a 和 b 传递给回调函数。 但是,我需要让对象 im 在回调中可用。 因此,我从外部将它作为参数传递,但是这“覆盖”了传递给回调的参数 a 和 b。

输出是:

 undefined [My Object]

如果我做:

im.size(function(a, b) {
  console.log(b);
  console.log(im);
});

输出是:

 17 [My object] // edited: was undefined before

如何传递 im 对象以在回调范围内可用以及获取传递给回调的变量? 一点解释也很好。

编辑:实际上在我的回调示例中可以访问外部范围。 对于异步回调也是如此,为什么可以通过这种方式访问​​外部作用域?

第二个示例也应该有效,因为 im 在该范围内定义(从第一个示例中推导出来)。

如果在定义函数的范围内可以访问变量,则它也可以在该函数内访问。 你可以做im.size(im); im传递给 size (例如),因此如果您执行im.size(function() {}) ,则该函数也可以访问 im 。

对于异步回调也是如此吗?

是的。

为什么可以通过这种方式访问​​外部作用域?

这就是它的工作原理 - 它在词法范围内,所以它是可访问的。 其他语言要求您明确说明要关闭哪些变量,而 JS 则不需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM