Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что за конструкция? (из jQuery) (https://javascript.ru/forum/misc/1598-chto-za-konstrukciya-iz-jquery.html)

Yojik 21.08.2008 11:52

Что за конструкция? (из jQuery)
 
Код фреймворка jQuery выглядит так:
(function(){
// Тут много-много кода
})();

Может кто-нибудь объяснить, зачем нужна конструкция вида (function() {})(); ?

Андрей Параничев 21.08.2008 14:21

Это автоматически запускаемое замыкание.

Передать параметры в JavaScript функцию можно используя конструкцию (функция)(параметры), например:
(alert)([32,31]);


Если вместо alert мы напишем анонимную функцию, то она тоже запустится. Причем сразу, как только будет объявлена. Вообще можно запустить объявленную анонимную функцию с параметрами, вот так:
var my = function() {
     alert('hi!');
// Вызываем функцию без параметров
}();


Но если написать просто function() {...}();, без присваивания какой-нибудь переменной (var my, напр.) - будет синтаксическая ошибка.

Поэтому используют скобки:
(function() { ... })();


Про замыкания вообще и для чего они нужны читайте в этой статье.

ZoNT 21.08.2008 14:22

Это определение анонимной функции и сразу же её выполнение...
Это не из jquery, а из обычного джаваскрипта, просто вы в другом ничём видимо не копались :)

Yojik 21.08.2008 14:36

Спасибо большое за пояснение. Только я опять не пойму (сейчас задам наверно дурацкий вопрос :))

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

Андрей Параничев 21.08.2008 14:39

Yojik,
Объявленные внутри такой функции переменные будут "приватными" и не будут доступны "извне".

Yojik 21.08.2008 14:40

Ага! Всё понял. Спасибо!

RobertoCavali 22.08.2010 14:46

Цитата:

Сообщение от Андрей Параничев (Сообщение 4834)
Yojik,
Объявленные внутри такой функции переменные будут "приватными" и не будут доступны "извне".

(function test(){
intest = 9;
})();
alert(intest);


Выводит 9. Почему недоступны извне? Если добавить var - то, понятно что переменная станет локальной равно как и в обычной функции (не в замыкании).

Может Вы что-то другое имели ввиду говоря "не будет доступной извне"?


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