这是一个链函数调用,我希望“--------”和下一个“---------”之间的所有输出 block 应该完全相同,但是当我尝试时运行它,输出的第一个 block '------'之间的内容与后面所有输出 block 不同?
输出的前两行是:
function(){alert('original')}
function(){alert('original')}
--------------
以下是:
function(){alert('original')}
function m(){
console.log(f.toString());
console.log(fun1.toString());
console.log('--------');
return m;
}
--------------
.... (repeat)
--------------
代码如下:
<script>
var fun1 = function(){alert('original')};
function decoratefun (f){
return (function m(){
console.log(f.toString());
console.log(fun1.toString());
console.log('--------');
return m;
})();
}
var fun1 = decoratefun(fun1);
fun1()()()();
</script>
最佳答案
第一次调用m
发生在decoratefun(fun1)
的调用中。它将记录函数 f
和 fun1
的当前值,该值尚未被重新分配为 m
.
要“修复”此问题,请使用
function decoratefun (f){
return function m(){
console.log(f.toString());
console.log(fun1.toString());
console.log('--------');
return m;
};
// ^ no invocation here
}
相反
关于javascript - 为什么这个装饰函数的结果与预期不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26804855/