Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   (function(){бла-бла-бла})() что это означает? (https://javascript.ru/forum/misc/24165-function-%7Bbla-bla-bla%7D-chto-ehto-oznachaet.html)

nerv_ 20.12.2011 00:23

Цитата:

Сообщение от Livanderiaamarum
//а если я тут сделаю вызов??
alert()//например
//функция алерт в каком контексте будет выполняться? в глобальном.

Я думаю, в контексте анонимной функции.

Livanderiaamarum 20.12.2011 00:25

Сразу же - это сразу же, она не добавляется в конец стека, а просто вызывается.
----------------------
как такое возможно? если мы внутри неё создадим вызов, а в них еще 20, создастся второй стек где будут хранится вызовы из анонимной? нет, как тогда хранить то если мы что-то вызовим внутри анонимной. ГДЕ хранить если не в стеке вызовов.

melky 20.12.2011 00:26

Цитата:

Сообщение от Livanderiaamarum (Сообщение 144596)
если наша анонимная вызывает что-то, а то в свою очередь тоже вызывает что-то, то СТЕК ВЫЗОВОВ НЕ ОСТАЕТСЯ НЕИЗМЕННЫМ!!!

??? стек вызовов показывает, откуда была вызвана функция. длина соотв. меняется.

Цитата:

Сообщение от Livanderiaamarum (Сообщение 144596)
а мне сказали что остается. как тогда компьютер узнает что нужно притормозить,

похоже, ты хотел сказать, "как тогда реализуются замыкания?".

Цитата:

Сообщение от Livanderiaamarum (Сообщение 144596)
и как узнает от куда потом нужно продолжить код если я сделаю вызовы внутри анонимной то где будет хранится список этих вызовов и.т.п. если он не создается то как компьютер будет запоминать что что вызвали и куда что возвращать?

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

melky 20.12.2011 00:29

Цитата:

Сообщение от Livanderiaamarum (Сообщение 144600)
Сразу же - это сразу же, она не добавляется в конец стека, а просто вызывается.

почему же? она доавится в стек.
и она не просто вызывается. она вызывается, когда исполнится блок кода, который исполняется в текущий момент (псевдоасинхронные ф-и - таймауты, event handlers)

Livanderiaamarum 20.12.2011 00:32

Цитата:

Сообщение от melky (Сообщение 144602)
почему же? она доавится в стек.
и она не просто вызывается. она вызывается, когда исполнится блок кода, который исполняется в текущий момент (псевдоасинхронные ф-и - таймауты, event handlers)

правильно:) а вот нотка говорит что нет;)

trikadin 20.12.2011 00:37

Цитата:

Сообщение от melky
никакого замыкания нет, пока эта функция не инкапсулирует какую-нибудь функцию, которая будет использовать локальные переменные из родительской.

Ну, обычно там есть ф-ции)

Цитата:

Сообщение от nerv_
Есть замыкание? Или это следует читать как "так и есть"?)

nerv_, я стараюсь писать без ошибок, поэтому мои слова нужно понимать так, как я их написал.

Livanderiaamarum, возможно, понимание облегчит (а может, усложнит :D) такой пример:
var func_global; // предпочитаю объявлять заранее
(function(){
 var variable_local=3;
 var func_local= function(){ alert(variable_local)};
 func_global= function(){func_local()};
})()
func_global();
alert(variable_local);

trikadin 20.12.2011 00:38

Я немного не в тему, прошу простить. Интернет отрубился как раз в тот момент, когда я нажал кнопку "Отправить"...

trikadin 20.12.2011 00:40

Цитата:

Сообщение от Livanderiaamarum
правильно а вот нотка говорит что нет

У вас удивительный талант понимать людей.

nerv_ 20.12.2011 00:44

Цитата:

Сообщение от trikadin
nerv_, я стараюсь писать без ошибок, поэтому мои слова нужно понимать так, как я их написал.

trikadin, тогда получается с Ваших слов, что тут есть замыкание
(function() {
// код
})();

Хотя чего спорить, все зависит от
//код
:D

Livanderiaamarum 20.12.2011 00:46

Цитата:

Сообщение от trikadin (Сообщение 144612)
Ну, обычно там есть ф-ции)


nerv_, я стараюсь писать без ошибок, поэтому мои слова нужно понимать так, как я их написал.

Livanderiaamarum, возможно, понимание облегчит (а может, усложнит :D) такой пример:
var func_global; // предпочитаю объявлять заранее
(function(){
 var variable_local=3;
 var func_local= function(){ alert(variable_local)};
 func_global= function(){func_local()};
})()
func_global();
alert(variable_local);

хера се)) круто же) девушке завтра это покажу) она шарит у меня более менее) ща спит уже)) не думал что так можно.. я серьезно:)
так, я как не странно почти понял что произошло.

кажется каждая функция расширяет область видимости... вверх стека... вплоть до variable_local ? это как бы восходящее кверху стека замыкание?:)


Часовой пояс GMT +3, время: 08:11.