javascript - 为什么这个装饰函数的结果与预期不一致?

标签 javascript function firefox

这是一个链函数调用,我希望“--------”和下一个“---------”之间的所有输出 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)的调用中。它将记录函数 ffun1当前值,该值尚未被重新分配为 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/

相关文章:

jquery - 如何设置jquery或javascript中函数调用的顺序或优先级?

javascript - 分配给函数是否会覆盖该函数或创建隐式全局变量?

javascript - 如何指向警报框?

javascript - 无法使用 JS 设置 CSS 规则

javascript - 无法使用 Firefox 进行 ajax 发帖

jquery - 使用 getScript 时 Firefox 中格式错误

javascript - 说明 IE 和 FireFox(或 Chrome、Safari 等)之间速度差异的 JavaScript 是什么?

javascript - 从 CustomEvent 获取事件的名称

function - 在 Robot Framework 中返回两个值

android deeplink,强制从外部打开