【发布时间】:2019-01-24 15:09:31
【问题描述】:
我的代码是这样的:
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是在该范围内定义的(从第一个示例推导出来的)。 -
@PM77-1 不,与此无关。这里的问题中没有提到
this。 -
如果一个变量在定义函数的范围内是可访问的,那么它也可以在该函数内访问。您可以使用
im.size(im);将im传递给大小(例如),因此如果您使用im.size(function() {}),那么该函数也可以访问im。 -
"异步回调也是如此" - 是的。 “为什么外部范围可以通过这种方式访问?”——这就是它的工作原理——它在词法范围内,所以它是可访问的。其他语言要求你明确声明要关闭哪些变量,JS 不需要。
标签: javascript scope callback closures