2015-07-13 4 views
1
(function (angular) { 
    "use strict"; 

    angular.module('module') 
    .filter('leFilter', function() { ... }); 

})(angular); 

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

angular.module('module') 
    .filter('leFilter', function() { ... }); 

Я никогда не сталкивался с проблемой, связанной с этим.

В контексте углового приложения действительно есть что-то, что можно извлечь из функции самоисполнения и «строгого» режима?

+2

Это действительно вопрос стиля кодирования, но вот довольно хорошая статья, в которой подробно описываются различные подходы: http://toddmotto.com/minimal-angular-module-syntax-approach-using-an- iife/ – Claies

ответ

3

Я действительно не вижу основной выгоды от запуска его в IIFE (Сразу-Срабатывают функцию Expression), особенно с тем, как хорошо Угловым о оборачивать вещи в себе закрытии (например, в фильтре). Вы изолируете себя от именования столкновений благодаря объему, создаваемому ими, но они уменьшают читаемость. В этом отношении они были бы более полезными, если бы вы хранили ваши угловые модули в переменных после создания экземпляра и использовали их при добавлении контроллеров/фильтров/и т. Д. вместо использования модуля getter, но я не рекомендую это делать.

Если вы используете систему сборки, такую ​​как Gulp или Grunt, возможно, стоит скомпилировать эти файлы внутри IIFE и оставить ваш источник без них.

Я всегда рекомендую использовать «использовать строгую», потому что это заставляет вас писать более чистый код с меньшей вероятностью возникновения проблем с литьем. Но, опять же, это не обязательно поможет вам «получить» что угодно, так как это предотвратит что-то плохое из возможных происшествий.

Оба эти устройства, по сути, безопасны, так что это дает вам какое-то преимущество.

+2

Я полностью согласен с советом, чтобы позволить gulp/grunt препроцессить файлы и добавить функцию wrapping & strict mode. Нет необходимости писать снова и снова в каждый файл, увеличивая отступы. Если вы когда-либо решили удалить его, изменение сценариев действительно проще, чем изменение десятков или сотен исходных файлов. – Sulthan

+0

Абсолютно! Спасибо за расширение этого. Я как бы замалчивал его. –

+0

Спасибо за ответ. Я читал здесь http://www.nczonline.net/blog/2012/03/13/its-time-to-start-using-javascript-strict-mode/, что использование «use strict» без IIFE может привести к ошибкам. Поэтому, если вы используете «use strict», рекомендуется также использовать IIFE. С учетом сказанного, я решил не использовать строгий режим просто потому, что мой текстовый редактор улавливает большинство ошибок, которые должен предотвращать строгий режим, например, случайные глобальные и повторяющиеся параметры функции. Я использую машинописный текст, чтобы предотвратить недействительное литье. Вы можете использовать строгий режим, если вы пишете свой код js в блокноте! – parliament

1

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

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