0

我有以下不能同时运行的功能:

function foo()
{
 if(this.running) return;
 this.running = true;
 setTimeout(function() {
  // Do Something
  delete this.running;
 }, 5000);
}

以上似乎有效,但是当我检查this匿名函数中的值时,它指向Window. 我不确定这是否是删除该属性的正确或正确方法。谁能告诉我为什么这是有效的?

4

1 回答 1

2

是的,这是正确的,因为调用您在 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 对象,

当睡眠队列中的每个元素都经过他的超时时间时,它将在所有它们的窗口对象下调用。

于 2013-11-09T07:19:05.693 回答