JavaScript严格模式下的全局变量

时间:2013-07-31 08:17:37

标签: javascript angularjs global-variables use-strict

一个简单的Javascript问题,例如我有一个像这样的Angular app.js;

'use strict';

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

我读到在Javascript文件的开头使用“use strict”会使该文件中的所有vars都被严格模式处理,这意味着当你使用全局变量(?)时会抛出错误,但是如何如果不在全球范围内,我们可以从所有控制器和服务中访问“eventApp”对象吗?

2 个答案:

答案 0 :(得分: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
})();

使用变量ab不是问题,但c会引发错误。在您的示例中使用eventApp变量应该没有问题。

答案 1 :(得分:4)

您不必引用eventsApp,因为angular将通过您用来定义模块的名称'eventsApp'来保存对象的引用。

所以,在所有其他文件中你可以使用:

angular.module('eventsApp');

访问模块。