2013-10-14 2 views
0

У меня есть функция, которая называет себя рекурсивно на setTimeout. Проблема заключается в том, что он теряет свой объем на этом пути.Область Javascript, как сохранить модуль

Так это то, что у меня есть ...

var module = function() { 
    function init() { 
     if (notYetReadySoTryAgain) { 
      setTimeout(this.init,100); 
      return 
     } 
    } 
} 

Второй раз через я получаю сообщение об ошибке инициализации не может быть найден (на объекте Window).

Что такое канонический способ справиться с поддержанием ссылки на модуль через setTimeout?

+0

вы замыкание. google search 'javascript clos' – unludo

+0

Где находится 'notYetReadySoTryAgain'? –

+0

Просто опустите ключевое слово ['this'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this), которое не имеет ничего общего с областью видимости. Вы можете напрямую ссылаться на функцию 'init' через' setTimeout (init, 100) '- это не свойство чего-либо. – Bergi

ответ

1

Включить область применения, используя самоисполнение; удалите this.

var module = function() { 
     (function init() { 
     if (notYetReadySoTryAgain) { 
      setTimeout(init,100); 
      return 
     } 
     })(notYetReadySoTryAgain); 
    } 
0

Удалить this., и он будет работать.

var module = function() { 
    function init() { 
    if (notYetReadySoTryAgain) { 
     setTimeout(init,100); 
     return 
    } 
    } 
} 

Использование setInterval также может быть вариантом для вас.

0

попробовать это:

var module = (function() { 
      (function init() { 
       if (notYetReadySoTryAgain) { 
        setTimeout(init,100); 
        return 
       } 
      })() 
     })() 
Смежные вопросы