gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:29:05 25 4
gpt4 key购买 nike

这是一个链函数调用,我希望“--------”和下一个“---------”之间的所有输出 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com