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,我更新了。