使所有函数严格模式文字对象?

时间:2013-03-05 21:20:22

标签: javascript object literals mode strict

假设我们有这个脚本。

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

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

3 个答案:

答案 0 :(得分:6)

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

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

请注意,当移动到此立即调用的函数表达式中时,先前在全局范围中声明的变量/函数将无法再在全局范围内访问。

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

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

@zzzzBov 的解决方案在浏览器和后端环境中也能很好地运行。

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

答案 2 :(得分:0)

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

(function (myApp) {
    'use strict';

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

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

myApp.myObj.init();