我有以下不能同时运行的功能:
function foo()
{
if(this.running) return;
this.running = true;
setTimeout(function() {
// Do Something
delete this.running;
}, 5000);
}
以上似乎有效,但是当我检查this
匿名函数中的值时,它指向Window
. 我不确定这是否是删除该属性的正确或正确方法。谁能告诉我为什么这是有效的?
我有以下不能同时运行的功能:
function foo()
{
if(this.running) return;
this.running = true;
setTimeout(function() {
// Do Something
delete this.running;
}, 5000);
}
以上似乎有效,但是当我检查this
匿名函数中的值时,它指向Window
. 我不确定这是否是删除该属性的正确或正确方法。谁能告诉我为什么这是有效的?
是的,这是正确的,因为调用您在 setTimepout 中提供的匿名函数的对象是窗口对象,要使用 this 的值保存闭包变量,只需执行以下操作:
function foo()
{
if(this.running) return;
this.running = true;
var self=this;
setTimeout(function() {
// Do Something
delete self.running;
}, 5000);
}
更新:
当您运行从 X 对象执行的 foo 函数时(有 X 作为 this),它会依次调用函数的内容,直到它运行 setTimeout 函数,该函数将匿名函数添加到睡眠队列下,执行将继续执行 foo 函数与 X 对象,
当睡眠队列中的每个元素都经过他的超时时间时,它将在所有它们的窗口对象下调用。