Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2012, 23:53
Аватар для Bandicoot
Кандидат Javascript-наук
Отправить личное сообщение для Bandicoot Посмотреть профиль Найти все сообщения от Bandicoot
 
Регистрация: 09.02.2011
Сообщений: 145

Ребят, зачем некоторые функции пишутся так?
Пример:
(function(){
// тут она что-то делает
}());

Меня интересуют эти самые скобочки вокруг тела функции. Вопрос конечно нубский, но все же я должен об этом знать)
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2012, 00:08
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Функция объявляется и тут же выполняется.

Обычно такие конструкции пишут чтобы создать локальный скоуп.
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2012, 00:40
Интересующийся
Отправить личное сообщение для Lottarend Посмотреть профиль Найти все сообщения от Lottarend
 
Регистрация: 13.09.2011
Сообщений: 13

Эта конструкция сразу же вызывает функцию после создания (потому что оканчивается на () ).
Но сразу же вызываться могут только Function Expression, поэтому для того, чтобы интерпретатор подумал, что это Function Expression и позволил ее вызвать сразу же после создания, функция оборачивается в круглые скобки.
Вот здесь все подробно описано: http://learn.javascript.ru/function-...ion-expression

Последний раз редактировалось Lottarend, 30.05.2012 в 00:48.
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2012, 00:48
Аватар для Bandicoot
Кандидат Javascript-наук
Отправить личное сообщение для Bandicoot Посмотреть профиль Найти все сообщения от Bandicoot
 
Регистрация: 09.02.2011
Сообщений: 145

Спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 30.05.2012, 02:16
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

еще тоже самое можно делать так
new function() {
  // тут она что-то делает
};
__________________
лучшая rss читалка zzreader.com
Ответить с цитированием
  #6 (permalink)  
Старый 30.05.2012, 11:46
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Bandicoot, только не так:
Сообщение от Bandicoot
(function(){
// тут она что-то делает
}());
, а вот так:
(function(){
// тут она что-то делает
})( );
Ответить с цитированием
  #7 (permalink)  
Старый 30.05.2012, 12:05
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от GuardCat Посмотреть сообщение
Bandicoot, только не так: , а вот так:
(function(){
// тут она что-то делает
})( );
И в чём разница?
Ответить с цитированием
  #8 (permalink)  
Старый 30.05.2012, 12:13
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Раед, а нет разницы разве? Читал, что при немедленном вызове функции, она должна быть заключена в скобки (и без них работает, но не везде).

В первом случае, получается, она вначале вызывается, а затем уже идут внешние скобки. Разве нет разницы?
Ответить с цитированием
  #9 (permalink)  
Старый 30.05.2012, 12:25
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

GuardCat, скобки нужны, чтобы интерпретатор отличил, является ли это объявлением функции (Function declaration) или функцией-выражением (Function expression). Поскольку аргументом оператора группировки «()» должно быть выражение, то интерпретатор «понимает», что это не объявление функции, а именно анонимная функция-выражение. Как расставить скобки — все равно
(function () {})();

(function () {
}());
Ответить с цитированием
  #10 (permalink)  
Старый 30.05.2012, 12:28
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Раед, Amphiluke, спасибо, понял.
Ответить с цитированием
Ответ



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

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