我正在查看装饰函数。例如,修饰函数可以使 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/