Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.08.2008, 12:52
Интересующийся
Отправить личное сообщение для Yojik Посмотреть профиль Найти все сообщения от Yojik
 
Регистрация: 13.03.2008
Сообщений: 15

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

Может кто-нибудь объяснить, зачем нужна конструкция вида (function() {})(); ?
Ответить с цитированием
  #2 (permalink)  
Старый 21.08.2008, 15:21
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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

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


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


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

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


Про замыкания вообще и для чего они нужны читайте в этой статье.
Ответить с цитированием
  #3 (permalink)  
Старый 21.08.2008, 15:22
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Это определение анонимной функции и сразу же её выполнение...
Это не из jquery, а из обычного джаваскрипта, просто вы в другом ничём видимо не копались
Ответить с цитированием
  #4 (permalink)  
Старый 21.08.2008, 15:36
Интересующийся
Отправить личное сообщение для Yojik Посмотреть профиль Найти все сообщения от Yojik
 
Регистрация: 13.03.2008
Сообщений: 15

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

В чём смысл сразу же выполнять эту анонимную функцию?
Я понимаю смысл в обычном замыкании, но в этой конструкции пока не вижу.
Ответить с цитированием
  #5 (permalink)  
Старый 21.08.2008, 15:39
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Yojik,
Объявленные внутри такой функции переменные будут "приватными" и не будут доступны "извне".
Ответить с цитированием
  #6 (permalink)  
Старый 21.08.2008, 15:40
Интересующийся
Отправить личное сообщение для Yojik Посмотреть профиль Найти все сообщения от Yojik
 
Регистрация: 13.03.2008
Сообщений: 15

Ага! Всё понял. Спасибо!
Ответить с цитированием
  #7 (permalink)  
Старый 22.08.2010, 15:46
Интересующийся
Отправить личное сообщение для RobertoCavali Посмотреть профиль Найти все сообщения от RobertoCavali
 
Регистрация: 22.08.2010
Сообщений: 11

Сообщение от Андрей Параничев Посмотреть сообщение
Yojik,
Объявленные внутри такой функции переменные будут "приватными" и не будут доступны "извне".
(function test(){
intest = 9;
})();
alert(intest);


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

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что означает ошибка "Отсутствует исполняющее ядро ДЛЯ расширения имени файла js" Mattias Общие вопросы Javascript 5 09.04.2018 07:45
jQuery для загрузки страницы в <div> Dr.Holerik jQuery 12 11.10.2016 18:36
Что такое "javascript:document.login.submit()" i_live_in_Moscow Общие вопросы Javascript 21 30.09.2008 15:25
первый опыт jquery. Вопросы. Titto jQuery 0 17.09.2008 10:32
Не могу понять как работает jQuery kostiaGt jQuery 2 20.07.2008 08:42