Ребят, зачем некоторые функции пишутся так?
Пример:
(function(){ // тут она что-то делает }()); Меня интересуют эти самые скобочки вокруг тела функции. Вопрос конечно нубский, но все же я должен об этом знать) |
Функция объявляется и тут же выполняется.
Обычно такие конструкции пишут чтобы создать локальный скоуп. |
Эта конструкция сразу же вызывает функцию после создания (потому что оканчивается на () ).
Но сразу же вызываться могут только Function Expression, поэтому для того, чтобы интерпретатор подумал, что это Function Expression и позволил ее вызвать сразу же после создания, функция оборачивается в круглые скобки. Вот здесь все подробно описано: http://learn.javascript.ru/function-...ion-expression |
Спасибо!
|
еще тоже самое можно делать так
new function() { // тут она что-то делает }; |
Bandicoot, только не так:
Цитата:
(function(){ // тут она что-то делает })( ); |
Цитата:
|
Раед, а нет разницы разве? Читал, что при немедленном вызове функции, она должна быть заключена в скобки (и без них работает, но не везде).
В первом случае, получается, она вначале вызывается, а затем уже идут внешние скобки. Разве нет разницы? |
GuardCat, скобки нужны, чтобы интерпретатор отличил, является ли это объявлением функции (Function declaration) или функцией-выражением (Function expression). Поскольку аргументом оператора группировки «()» должно быть выражение, то интерпретатор «понимает», что это не объявление функции, а именно анонимная функция-выражение. Как расставить скобки — все равно
(function () {})(); (function () { }()); |
Раед, Amphiluke, спасибо, понял.
|
Часовой пояс GMT +3, время: 13:45. |