【问题标题】:Global variables in JavaScript strict modeJavaScript 严格模式下的全局变量
【发布时间】:2013-07-31 15:58:26
【问题描述】:

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

'use strict';

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

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

【问题讨论】:

    标签: javascript angularjs global-variables use-strict


    【解决方案1】:

    错误的假设是在严格模式下所有全局变量都是不允许的。实际上只有 undefined 全局变量会抛出错误。 (事实上​​,如果你不能使用 any 全局变量,你基本上什么都做不了。在全局范围内必须至少有一些东西。)

    例如:

    "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 变量应该没有问题。

    【讨论】:

    • Tnx,如果 var a 没有用“foo”初始化,那么它也是一个错误,对吧?
    • 只要定义好就可以了,var a;就够了。
    • 我的意思是只使用 var a;并且不再在该文件中的任何地方初始化
    • 我很困惑,但是你说未初始化的全局变量会抛出错误:)
    • 好的,抱歉措辞令人困惑。定义变量就足够了。
    【解决方案2】:

    您不必引用 eventsApp,因为 Angular 将保存对您用于定义模块的名称“eventsApp”的对象的引用。

    因此,您可以在所有其他文件中使用:

    angular.module('eventsApp');
    

    访问模块。

    【讨论】:

    • srry thi si abit 令人困惑,所以你的意思是 eventsApp 不是全球性的?
    • 我的意思是你不需要在其他文件中引用eventsApp。事实上,您甚至不需要设置该变量。如果您像这样定义一个模块,Angular 会很高兴:angular.module('eventsApp', []);,然后针对一个模块(在另一个文件中)注册一个服务,如下所示:angular.module('eventsApp').factory('service');
    • 我明白你的意思,但我的问题超出了角度,var eventsApp 是否是全局的?我知道它是全局/窗口
    • 我会的,tnx 为无用的 2 美分和建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多