Показать сообщение отдельно
  #52 (permalink)  
Старый 05.12.2011, 19:49
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от trikadin
почему именно этого не происходит)
Все очень логично, думать долго не нужно... при подобном использовани:
setTimeout(function blah(){
    // ...
    setTimeout(blah, 1);
}, 1);
Ты передаешь таймеру ссылку на функцию которая не находиться внутри текущего scope, интерпретатор это видит и не сохраняет scope предыдущей функции, если же интерпретатор видит такую конструкцию:
setTimeout(function blah(){
    // ...
    setTimeout(function(){
        blah();
    }, 1);
}, 1);
Он будет вынужден сохранить scope вызвавшей его функции, так как передана не ссылка а функция, которая находиться в области видимости предыдущей функции... И думать тут не нужно, интерпретатор не дураки писали, и понимали что нет смысла хранить scope в случаях что я указал в первом примере.

Последний раз редактировалось devote, 05.12.2011 в 19:52.
Ответить с цитированием