Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Анонимные обёртки в JavaScript (https://javascript.ru/forum/misc/18562-anonimnye-objortki-v-javascript.html)

lkart 06.07.2011 18:20

Анонимные обёртки в JavaScript
 
Читаю http://bonsaiden.github.com/JavaScri...unction.scopes и не могу понять кое-что.

Вот показан пример:

(function() {
   // самостоятельно созданное "пространство имён"

   window.foo = function() {
       // открытое замыкание
   };

})(); // сразу же выполнить функцию     <--- вот тут


Зачем вообще после фигурных скобок ставятся еще одни двойные круглые скобки?
Вот еще пример кода:

( // разобрать функцию внутри скобок
function() {}
) // и вернуть объект функции
() // вызвать результат разбора


Написано также, что "безымянные функции являются выражениями; поэтому, чтобы вы имели возможность их выполнить, они сперва должны быть разобраны."

В одном случае "сразу же выполнить функцию", в другом "вызвать результат разбора", так зачем конкретно ставятся эти вторые скобки, как это работает или где про это можно подробнее почитать?

trikadin 06.07.2011 18:28

(function(){alert("Меня вызвали!")})()


Это анонимная ф-ция, которая создаётся и тут же вызывается.

trikadin 06.07.2011 18:34

Скобки возвращают результат выражения внутри них. В данном случае результатом будет анонимная ф-ция.
function(){alert("Меня вызвали!")} //это анонимная ф-ция

код, приведённый мной выше, аналогичен следующему:
func= function(){alert("Меня вызвали!")};
(func)();

lkart 06.07.2011 18:37

Спасибо за ответ, теперь понятно.

Прочитал пару учебников для начинающих по js, но именно такие конструкции в них не рассматривались.

trikadin 06.07.2011 18:40

Почитайте про замыкания. Это в продолжение темы.

Aetae 06.07.2011 18:45

Эти скобки там не просто так, они передают параметры в функцию:
(function(msg){alert(msg)})("Меня вызвали!")

lkart 06.07.2011 18:57

Цитата:

Сообщение от Aetae (Сообщение 112076)
Эти скобки там не просто так, они передают параметры в функцию

Да, спасибо, я разобрался. Мне была не знакома сама конструкция, поэтому скобки и удивили.
В учебниках, как правило, рассматривают только обыкновенные:
function foo() {}
foo();

или
var foo = function() {};


А тут сталкиваешься с какой нибудь конструкцией посложнее и остаешься в недоумении.


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