Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 05.12.2011, 19:40
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Kolyaj, devote, век живи - век учись) Но тогда я тоже хочу уточнить, почему не происходит накопления скопов. Казалось бы, такое поведение было бы достаточно логичным...

devote, я доверяю вашему опыту, но хотелось бы узнать чуть больше о теории - почему именно этого не происходит)
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #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.
Ответить с цитированием
  #53 (permalink)  
Старый 05.12.2011, 20:10
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

devote, а так?

setTimeout(function blah(){
var i=0;// например
setTimeout(blah, 1);
}, 1);

И кстати - у меня ваш пример из консоли не запустился в ff8.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #54 (permalink)  
Старый 05.12.2011, 20:21
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от trikadin
devote, а так?
Тоже scope удалится, нет смысла его хранить. Написал же, ссылка не может получить доступ к scope из которой ее вызвали.

Сообщение от trikadin
И кстати - у меня ваш пример из консоли не запустился в ff8.
Он будет работать в strict mode так как функцию с именем, в обычном режиме не поюзаешь. Надо примерно так:

function blah(){
    // ....
    setTimeout( blah, 1 );
}
setTimeout( blah, 1 );
scope сохраняется лишь в том случае, если внутри этой функции была создана другая функция, которой возможно нужно будет обратиться к scope своего потомка. Но только до того как ссылка на функцию не будет утерена.
Ответить с цитированием
  #55 (permalink)  
Старый 05.12.2011, 20:26
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от devote
Он будет работать в strict mode так как функцию с именем, в обычном режиме не поюзаешь.
Как переводить в строгий режим? Имеется в виду доктайп?
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #56 (permalink)  
Старый 05.12.2011, 20:30
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

приведу пример

function blah(){ 
    var a = 1;
    //  scope этой функции будет храниться до тех пор, пока 
    document.body.onclick = function(){  // эта функция имеет жизнь
        // как только эта функция потеряет связь с миром, все scope будут удалены
    }
}


например scope функции blah() будет храниться до тех пор, пока ее внутренний объект(функция) имеет связь с чем-то либо, тоесть в наше случае ссылка на нее висит у объекта BODY, если потеряю ссылку, тоесть выполню где-то:
document.body.onclick = null;
то scope верхней функции будет уничтожен сборщиком мусора.
Ответить с цитированием
  #57 (permalink)  
Старый 05.12.2011, 20:30
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от trikadin Посмотреть сообщение
Как переводить в строгий режим? Имеется в виду доктайп?
MDN
"use strict";

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

Сообщение от trikadin
Как переводить в строгий режим? Имеется в виду доктайп?
function blah() {
    "use strict"; // - переключили в строгий режим
    // ...
}
Ответить с цитированием
  #59 (permalink)  
Старый 05.12.2011, 20:55
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Как много я всего не знаю ещё)

devote, я понимаю, как работает механизм замыканий) Непонятки были только с тем моментом...
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #60 (permalink)  
Старый 07.12.2011, 19:33
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Большое всем спасибо
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не срабатывает scrollLeft анимация в firefox krokodily jQuery 2 25.08.2016 14:19
JQuery, анимация для нескольких элементов сразу, возможно ли? Logo jQuery 21 29.05.2012 21:50
Анимация движения Armen Общие вопросы Javascript 8 02.08.2011 18:32
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Цикличность анимация? SashaBorandi jQuery 1 25.12.2008 09:20