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)

trikadin 20.12.2011 00:49

Цитата:

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

Я сейчас дзен поймаю. Ты что написал вообще?

У каждой ф-ции есть своя область видимости. Любая переменная, объявленная в ней с ключевым словом var, будет локальной и недоступной для внешних ф-ций. Поиск переменной происходит сначала в локальной области, потом - в локальной области внешней ф-ции (если есть) и т.д., пока не дойдём до global object. Если и в global object нету - то Referrence error.

Что тут не понятного?

Livanderiaamarum 20.12.2011 00:49

Цитата:

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

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

скажу вам одну тайну, профессианалы вроде меня знают это, щас серьезно, на заметку.
ВСЕ функции в js ВСЕГДА создают замыкания))

Livanderiaamarum 20.12.2011 00:51

Цитата:

Сообщение от trikadin (Сообщение 144619)
Я сейчас дзен поймаю. Ты что написал вообще?

У каждой ф-ции есть своя область видимости. Любая переменная, объявленная в ней с ключевым словом var, будет локальной и недоступной для внешних ф-ций. Поиск переменной происходит сначала в локальной области, потом - в локальной области внешней ф-ции (если есть) и т.д., пока не дойдём до global object. Если и в global object нету - то Referrence error.

Что тут не понятного?

это тебе что-то непонятно)) мне все понятно) только я не понял вообще что ты написал, вернее я не понял как это относится к твоему коду и вообще к теме разговора. если ты не знаешь то замыкания это когда скоп копируется. есть низсходящие замыкания, есть восходящие. в данном случае восходящее. скоп расширен вверх. что, незнакомо)? А вроде Резинга читают тут все...

melky 20.12.2011 00:52

Цитата:

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

нет замыкание - скоп оборачивающей анонимной функции. и никуда оно не восходит. но в стеке будет 3 функции.

trikadin 20.12.2011 00:53

Цитата:

Сообщение от Livanderiaamarum
это тебе что-то непонятно)) мне все понятно)

А чего спрашиваешь тогда?

Livanderiaamarum 20.12.2011 00:55

Цитата:

Сообщение от trikadin (Сообщение 144623)
А чего спрашиваешь тогда?

просто:) ^__^ скучно же сидеть просто так) топик интересный создал вот)

Livanderiaamarum 20.12.2011 00:57

Цитата:

Сообщение от melky (Сообщение 144622)
нет замыкание - скоп оборачивающей анонимной функции. и никуда оно не восходит. но в стеке будет 3 функции.

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

nerv_ 20.12.2011 00:59

Цитата:

Сообщение от Livanderiaamarum
так, я как не странно почти понял что произошло.

А я не понял. Можно специально для таких, как я?)
Это замыкание в замыкании? :) Вроде нет. Судя по всему функция обертка расширяет область видимости.
Я говорю вот об этом
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);

Livanderiaamarum 20.12.2011 01:00

Цитата:

Сообщение от nerv_ (Сообщение 144627)
А я не понял. Можно специально для таких, как я?)
Это замыкание в замыкании? :)

да)

melky 20.12.2011 01:11

Цитата:

Сообщение от Livanderiaamarum (Сообщение 144628)
да)

нет.

variable_local берётся из сохранённой области видимости корневой функции (самая первая - т.е. анонимная оборачивалка).

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



PS как мне нравится эта картинка троллфейса.


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