考虑这个简单的场景:
(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);
})();
Run Code Online (Sandbox Code Playgroud)
如果您要在控制台中复制并运行此代码,它将输出foo is alive!两次.我试图理解为什么不会foo被空函数覆盖.foo显然是一个在超时回调中被识别的变量,它指向该函数.
对这个问题
感到无聊:这是一个简单的测试案例,用于我使用AJAX回调而不是在这个简单示例中使用的超时的更复杂场景.
你正在启动setTimeout()函数,foo() 当它仍然存在时传递它(不是空的),因此它实际上可以在以后的范围内使用setTimeout().
快速演示以实现您的预期结果:
setTimeout(function () {
foo();
}, 100);
Run Code Online (Sandbox Code Playgroud)
(小提琴:http://jsfiddle.net/0p7fgsso/)
这里foo()只有在它成为空函数后才能访问该函数.所以什么都没有console.log.
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |