如何从匿名函数中删除函数的属性?

时间:2013-11-09 07:08:29

标签: javascript this anonymous-function

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

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

以上似乎有效,但当我在匿名函数中检查this的值时,它指向Window。我不确定这是否是正确或正确的删除属性的方法。任何人都可以建议为什么这有效吗?

1 个答案:

答案 0 :(得分:2)

是的,这是正确的,因为调用setTimepout中提供的匿名函数的对象是window对象,要保存一个值为this的闭包变量,只需执行以下操作:

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

<强>更新

当你运行从X对象执行的foo函数(这样有X)时,它会按顺序调用函数的内容,直到它运行setTimeout函数,此函数在睡眠队列下添加匿名函数,执行将继续执行带有X对象的foo函数,

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