2015-04-22 2 views
1

ниже код должен объявить новый модуль:Почему синтаксис Javascript использует несколько круглых скобок?

(function() { 
    'use strict'; 

    angular.module('app.avengers', []); 
})(); 

Из-за моего незнания JavaScript, я изо всех сил, чтобы понять, почему несколько скобку.

Я понимаю, что это может быть глупый вопрос, но просто пытается понять, почему это было так написано, а не просто:

angular.module('app.avengers', []); 

ответ

2

Синтаксис вы получаете путать с является anonymous function.

Причина анонимной функции ((function() {...})();) заключается в том, чтобы ограничить область применения 'use strict'. Если бы у вас был этот код вне функции, он применим к глобальной области, что нежелательно.

Более подробная информация о строгом режиме здесь: http://www.w3schools.com/js/js_strict.asp

0
(function() { 
    ... 
}}(); 

является «прямоприменяемой анонимной функцией» (EDIT: вернее, «немедленно вызываются выражение функции»). Он определяет функцию: function() { ... }, затем выполняет ее без аргументов (()). Это функционально эквивалентно следующему, что может быть легче следовать:

var temp = function() { 
    ... 
}; 
temp(); 

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

В этом случае он служит для выделения директивы pragma use strict.

+0

"прямоприменяемых анонимную функцию" --- это технически неверно термин, так как он не самостоятельно выполнять сам. – zerkms

+0

@zerkms: достаточно справедливо. IIFE вернее, но на самом деле менее распространен, я считаю. И если вы Google для этого, вы обнаружите, что ваше «это не называется, что» явно ложно. – Amadan

+0

«но на самом деле менее распространены». Конечно, давайте разбросаем мусор даже дальше. – zerkms

2

Эта функция объявлена ​​в альтернативном шаблоне проектирования JavaScript под названием «Immediately Invoked Function Expression», или, чаще, IIFE.

Выражения, вызываемые с помощью функции мгновенного вызова, могут использоваться для предотвращения перетаскивания переменных изнутри блоков, защиты от загрязнения глобальной среды и одновременного разрешения доступа к методам, сохраняя при этом конфиденциальность для переменных, определенных внутри функции.

Это не обязательно для Угловых приложений, но это обычная практика, используемая многими разработчиками JavaScript.

Первый набор круглых скобок включает весь функциональный блок как анонимную функцию. Вторая пустая скобка служит для , вызывающей анонимной функцией, следовательно, является общей путаницей, что это «самоисполнение». По сути, анонимная функция выполняет задачу определения внутренней функции, тогда вызов обеспечивает правильное определение определения.

Как указывали другие, основными причинами определения функции таким образом является выделение кода и обеспечение того, что 'use strict'; применяется только к этой функции, а не к глобальной области. Хотя в этом ограниченном примере прагма 'use strict;' служит очень ограниченной цели.

1

Это то, что называется непосредственным вызовом функции в javascript, и не связано с угловым JS.

Первый набор символов parens предоставляет закрытую лексическую область и возвращает объект функции, определенный внутри, и второй набор функций parens выполняет эту функцию.

Так просто:

  1. определяют
  2. выполнить
+0

«Это то, что называется функцией самозапускания» - это не называется. Он даже не сам себя вызывает. – zerkms

+0

Ну, есть много людей, которые их называют, но я беру вашу мысль, IIFE понятнее. –

Смежные вопросы