2013-11-09 4 views
0

У меня есть следующие функции, которые не могут быть запущены одновременно:Как удалить свойство функции из анонимной функции?

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

выше, кажется, работает, но когда я проверяю значение this в анонимной функции, это указывает на Window. Я не уверен, что это правильный или правильный метод для удаления свойства. Может ли кто-нибудь сообщить, почему это работает?

+2

'var that = this;' PS: почему бы не переключить его на 'false', а не на удаление? – zerkms

+0

@zerkms, есть ли разница между удалением и установкой на false? –

+0

последнее выглядит более последовательным. Отсутствие свойства означает какое-то неизвестное состояние, в то время как состояние довольно известно - оно не работает – zerkms

ответ

2

Да, это правильно, так как объект, который вызывает анонимную функцию, представленную в setTimepout является объект окна, чтобы сохранить переменные закрытия со значением этого просто сделайте следующее:

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

Update :

Когда вы запускаете функцию foo, которая была выполнена из объекта X (имеет X как это), она вызывает содержимое функции последовательно до тех пор, пока она не запускает функцию setTimeout, эта функция добавляет анонимную функцию в очереди ожидания выполнения будет продолжать выполнение fo o с объектом X,

, когда каждый элемент очереди ожидания передает свое время ожидания, он будет вызываться под объектом окна для всех из них.

+0

Можете ли вы объяснить, почему приведенный выше код работает, несмотря на то, что он не является правильным? –

+0

Сэр, пожалуйста, уточните мой обновленный ответ и скажите мне, нет ли чего-то недостающего? @QuestionOverflow – Hilmi

+0

Извините, я не понимаю. Можете ли вы рассказать о том, как 'this' в' this.running' в анонимной функции может указывать на функцию foo? –

Смежные вопросы