【问题标题】:Don't understand a construct in a JS Decorator [duplicate]不理解 JS 装饰器中的构造 [重复]
【发布时间】:2019-05-12 13:44:14
【问题描述】:

我正在研究 JS 装饰器,但不明白包装器如何访问内部函数参数。 sn-p 有效,但我不明白为什么匿名函数 'function(val)' 可以访问 val,slow() 的参数。

// https://codepen.io/lideebe/pen/VOjGvb

// simple function that gets wrapped
function slow(x){
  return x * 3;
}

// the wrapper function
function cacheDecorator(func){

  return function(val){ // How does this anonymous function get access to val?
    return func(val)
  }

}

// do the wrap
slow = cacheDecorator(slow);

// call the function
console.log(slow(2));

输出是 6,这是正确的。

【问题讨论】:

  • Javascript 闭包在工作中。
  • dup 中的第一个示例应该会为您说明问题。但本质上cacheDecorator返回一个函数,所以slow设置为内部匿名函数,可以使用slow(2)调用

标签: javascript decorator


【解决方案1】:

这是因为cacheDecorator 返回一个带有参数val 的函数,并且当您使用值2 调用该返回函数时,它就像正常一样被访问。所以slow,在你重新分配之后,就是:

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

所以val作为新包装函数调用时传递的参数的参数。

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2012-02-09
    • 2017-05-04
    • 2011-10-04
    • 2014-04-18
    • 2016-05-19
    相关资源
    最近更新 更多