这是一个链函数调用,我希望所有的输出块都在' --------'之间。然后' ---------'应该完全相同,但是当我尝试运行它时,第一个块之间的内容和#39; ------'输出的输出与以下所有输出块不同?
前两行输出是:
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>
答案 0 :(得分:1)
m
的第一次调用发生在decoratefun(fun1)
的调用中。它会记录f
的函数fun1
以及尚未重新分配为m
的{{1}}的当前值。
要“修复”此项,请使用
function decoratefun (f){
return function m(){
console.log(f.toString());
console.log(fun1.toString());
console.log('--------');
return m;
};
// ^ no invocation here
}
代替