javascript - 为什么这个 javascript 装饰函数不起作用?

标签 javascript decorator

我正在查看装饰函数。例如,修饰函数可以使 sum() 函数返回双倍和。但是下面的代码没有按预期工作,我将'f'更改为'sum',请参阅相关行的评论,为什么我不能更改它?

<script>
function doublingDecorator(f) {        

  return function() {

    return 2*sum.apply(this, arguments); // the original code is: return 2*f.apply(this,arguments) I changed to sum, then doesn't work.
  } 
}

// Usage:

function sum(a, b) {
  return a + b
}


var sum =  doublingDecorator(sum);          // sum gets decoration


alert (sum(3,4)); //return 14
</script>

最佳答案

doublingDecorator 中的

f 未使用。相反,您引用 sum,您也重新定义了它。这会导致无限循环。

function doublingDecorator(f) {        
  return function() {
    return 2*f.apply(this, arguments);
          // ^-- f instead of sum!
  } 
}
function sum(a, b) {
  return a + b
}
var sum = doublingDecorator(sum); // note: sum is already declared here, redeclaring is technically wrong.
console.log(sum (3,4)); // 14

关于javascript - 为什么这个 javascript 装饰函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26785063/

相关文章:

javascript - 关于Rails/JQuery/Prototype/RJS的情况

javascript - 使用 reactjs 在 POST 后重定向

python - scala:具有可变长度参数的函数对象的特征?

Python:可选参数装饰器作为类的实现

javascript - jQuery 检测哪个 id 被点击

javascript - 如何设置Frameset的固定宽度和居中对齐?

javascript - 什么是 "decorators"以及它们是如何使用的?

python - Django 中基于类的 View 上的 login_required 装饰器

Python装饰器——试图理解一个简单的例子

javascript - 预选无组织列表中的元素 <ul> <li>