gpt4 book ai didi

javascript - 函数指针变量覆盖的奇怪场景

转载 作者:搜寻专家 更新时间:2023-11-01 05:31:04 24 4
gpt4 key购买 nike

考虑这个简单的场景:

(function x(){
var foo = function(){
console.log('foo is alive!');

// set 'foo' variable to an empty function, using a delay
setTimeout(function(){
foo = function(){};
},0);
}

foo();
// calling 'foo' again, after it should be an empty function
setTimeout(foo,100);
})();

如果您在控制台中复制并运行此代码,它将输出 foo is alive! 两次。我试图理解为什么 foo 不会被空函数覆盖。 foo 显然是一个在超时回调中被识别的变量,它指向函数。

这个问题的无聊背景:
这是一个简单的测试用例,用于更复杂的场景,我使用 AJAX 回调而不是这个简单示例中使用的超时。

最佳答案

你马上启动 setTimeout() 函数,将它传递给 foo() 当它仍然存在时(不是空的),因此它实际上稍后可用,在 setTimeout() 的范围内。

实现预期结果的快速演示:

setTimeout(function () {
foo();
}, 100);

( fiddle :http://jsfiddle.net/0p7fgsso/)

这里的foo()函数只有在变成空函数后才会被访问。所以没有任何东西得到 console.log-ged。

关于javascript - 函数指针变量覆盖的奇怪场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28169737/

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