2013-07-31 4 views
12

Простой вопрос Javascript, например, у меня есть Angular app.js;Глобальные переменные в строгом режиме JavaScript

'use strict'; 

var eventsApp = angular.module('eventsApp',[]); 

Я читал, что с помощью «использовать строгий» в начале файла Javascript делает все вары в этом файле должны быть обработаны в строгом режиме, что означает, он будет выдавать ошибку при использовании глобальной переменной (?) , но тогда как мы можем получить доступ к этому объекту eventApp из всех наших контроллеров и служб, если это не в глобальной области?

ответ

13

Неверное предположение состоит в том, что в строгом режиме все глобальные переменные запрещены. Фактически только undefined глобальные переменные вызывают ошибку. (На самом деле вы в принципе ничего не мог делать вообще, если вы не можете использовать любой глобальные переменные Там должно быть по крайней мере что-то в глобальном масштабе.).

Например:

"use strict"; 

var a = "foo"; 
var b; 

(function() { 
    a = "bar"; // this is ok, initialized earlier 
    b = "baz"; // this is also ok, defined earlier 
    c = "qux"; // this is not, creating an implicit global 
})(); 

Использование переменных a или b не является проблемой, но c выдает ошибку. Не должно быть проблем с использованием переменной eventApp в вашем примере.

+0

Tnx, если var a не был инициализирован с помощью «foo», то это также ошибка? – Spring

+0

Пока это определено, все в порядке, поэтому 'var a;' достаточно. – JJJ

+0

Я имею в виду использование только var a; и не начинать больше нигде в этом файле – Spring

4

Вам не нужно ссылаться на eventsApp, потому что угловой будет содержать ссылку на объект по названию 'eventsApp', который вы используете для определения модуля.

Таким образом, во всех других файлов, которые вы можете просто использовать:

angular.module('eventsApp'); 

Чтобы получить доступ к модулю.

+0

srry thi si abit confusing, значит, вы имеете в виду событияApp не является глобальным? – Spring

+0

Я хочу сказать, что вам не нужно ссылаться на 'eventsApp' в других файлах. На самом деле вам даже не нужно устанавливать эту переменную. Угловой рад, если вы определите такой модуль: 'angular.module ('eventsApp', []);' и затем зарегистрируйте службу против модуля (в другом файле) следующим образом: 'angular.module ('eventsApp') .factory ('service'); ' –

+0

Я вижу вашу точку зрения, но мой вопрос за пределами угловых событий varApp глобальный или нет? и я понимаю, что это глобально/окно – Spring