Функция Javascript - PullRequest
       12

Функция Javascript

3 голосов
/ 14 июня 2011

Пожалуйста, объясните следующий способ написания функции в функциях javascript:

(function (){
 // some code 
})()

Я понимаю тот факт, что из-за конечных скобок "()", функция будет выполняться немедленно, но не включаетфункция в скобках значит?

Ответы [ 3 ]

5 голосов
/ 14 июня 2011

Ваш синтаксис неверен.Редактировать: исправлено.

Посмотрите на обычное определение функции, которое вы хотите вызвать один раз и только один раз:

function add(x,y) {
   var z = x + y; 
   // do something with z
}

add(2,3);

Вы можете уменьшить этот код, чтобы выполнить его сразу, не нужно называтьit add :

(function(x ,y) {
   var z = x + y; 
   // do something with z
})(2,3)

Обратите внимание, как мы окружили функцию набором скобок, чтобы сделать его вызываемым выражением.Этот шаблон часто используется для создания замыкания (захвата состояния) определенных переменных, например:

jQuery.noConflict(); //Disables the use of $ in the global scope
(function($) {

   //Safely use $ inside this function
   $('.link').click(function(e) {
      //etc
   });

})(jQuery);
4 голосов
/ 14 июня 2011

Как указал РобГ, это единственный допустимый выбор оператора в вашем исходном вопросе.

(function (){
 // some code 
}())

Это выполняется сразу после анализа и предоставляет способ выйти за рамки кода внутрифункция из остальной части вашего кода.Это называется замыканием (см. замыкания в MDN ) и может помочь с утечками памяти в ваших сценариях.

1 голос
/ 14 июня 2011

Заключение кода в оператор группирования превращает его из объявления функции в выражение функции (где имя является необязательным и обычно опускается).Этот шаблон часто называют «выражением немедленного вызова функции» (iife) или «выражением немедленного выполнения функции» (iefe).

Он используется для замены объявления функции, которое вызывается только один раз.Это также имеет основополагающее значение для шаблона модуля.

...