Javascript Don';我不理解JS装饰器中的构造

Javascript Don';我不理解JS装饰器中的构造,javascript,decorator,Javascript,Decorator,我在研究JS装饰器,不明白包装器是如何访问内部函数参数的。该代码段可以工作,但我不理解为什么匿名函数“function(val)”可以访问val,即slow()的参数 输出是6,这是正确的。这是因为cacheDecorator返回一个带有参数val的函数,当您使用值2调用返回的函数时,它会像正常情况一样被访问。因此,重新分配后,slow,是: slow = function(val) { return val * 3; } 因此,调用新包装的函数时,val被用作传递参数的参数。这是因为ca

我在研究JS装饰器,不明白包装器是如何访问内部函数参数的。该代码段可以工作,但我不理解为什么匿名函数“function(val)”可以访问val,即slow()的参数


输出是6,这是正确的。

这是因为
cacheDecorator
返回一个带有参数
val
的函数,当您使用值
2
调用返回的函数时,它会像正常情况一样被访问。因此,重新分配后,
slow
,是:

slow = function(val) {
  return val * 3;
}

因此,调用新包装的函数时,
val
被用作传递参数的参数。

这是因为
cacheDecorator
返回一个带有参数
val
的函数,当您使用值
2
调用返回的函数时,它会像正常情况一样被访问。因此,重新分配后,
slow
,是:

slow = function(val) {
  return val * 3;
}

因此,
val
被用作调用新包装函数时传递的参数。

Javascript闭包在起作用。dup中的第一个示例应该为您澄清一些问题。但是本质上
cacheDecorator
返回一个函数,因此
slow
被设置为内部匿名函数,可以在工作时使用
slow(2)
Javascript闭包调用该函数。dup中的第一个示例应该为您澄清一些问题。但是本质上
cacheDecorator
返回一个函数,因此
slow
被设置为内部匿名函数,可以使用
slow(2)