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