Javascript 为什么结果与此函数中的预期结果不一致?

Javascript 为什么结果与此函数中的预期结果不一致?,javascript,function,firefox,Javascript,Function,Firefox,这是一个链式函数调用,我希望'----------'和下一个'-----------'之间的所有输出块应该完全相同,但是当我尝试运行它时,输出的第一个块'----------'之间的内容与下面的所有输出块都不同 前两行输出为: function(){alert('original')} function(){alert('original')} -------------- 以下是: function(){alert('original')} function m(){ console

这是一个链式函数调用,我希望'----------'和下一个'-----------'之间的所有输出块应该完全相同,但是当我尝试运行它时,输出的第一个块'----------'之间的内容与下面的所有输出块都不同

前两行输出为:

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>

var fun1=函数(){alert('original')};
函数decoratefun(f){
返回(函数m(){
log(f.toString());
log(fun1.toString());
console.log('----------');
返回m;
})();
}
var fun1=decoratefun(fun1);
fun1();

第一次调用
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
}

相反,我无法复制。您使用的是哪种浏览器?你得到了什么输出?为什么你希望它是一样的?@Bergi我正在使用firefox和firebug插件,因为它正在写入控制台,我认为需要firebug或一些插件来显示结果。因为我在每个块中打印fun1和f的字符串格式。我原以为Firefox的内置控制台现在可以做到这一点,但不管怎样:我还是要问:你得到了什么意想不到的输出?请把它纳入你的问题。@Bergi thx,我更新了。