3

假设我们有这个脚本。

var apple = {
    type: "macintosh",
    color: "red",
    getInfo: function () {
        return this.color + ' ' + this.type + ' apple';
    }
    ///more functions here....
}

如何让所有这些功能在严格模式下运行?我可以将“use strict”放在文件顶部,但 JSlint 不同意。另一种方法是在每个函数中都加上“use strict”,但有更好的选择吗?

4

3 回答 3

6

将所有内容包装在 IIFE 中,JSLint 应该会批准。

(function () {
    "use strict";
    //all your code here
}());

请注意,以前在全局范围内声明的变量/函数在移至此立即调用的函数表达式内部时将不再可在全局范围内访问。

您必须将这些显式设置为全局对象的属性,例如window浏览器环境的对象:

(function () {
    "use strict";
    window.someGlobalVariable = "something";
}());

@zzzzBov的解决方案也适用于浏览器和后端环境。

于 2013-03-05T21:21:58.820 回答
2

将所有内容包装在IIFE中,为全局引用设置别名,并在全局对象上显式设置全局变量:

(function (root) { //could be window (browser), could be global (node)
    "use strict";
    ...code...
    root.apple = apple; //explicitly make apple a global variable
}(this));
于 2013-03-05T21:25:12.437 回答
0

如果您为对象文字使用命名空间,我最喜欢这种方法:

(function (myApp) {
    'use strict';

    myApp.myObj = {
        init: function(){}           
    }

}(window.myApp = window.myApp || {}));

myApp.myObj.init();
于 2016-02-23T17:41:25.993 回答