代码之家  ›  专栏  ›  技术社区  ›  DunnoMan

是否将所有函数设为严格模式文字对象?

  •  3
  • DunnoMan  · 技术社区  · 12 年前

    假设我们有这个脚本。

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

    如何让所有这些函数在严格模式下运行?我可以把“use strict”放在文件的顶部,但JSlint不赞成这样做。另一种选择是在每个函数中都使用“use strict”,但有更好的选择吗?

    3 回复  |  直到 12 年前
        1
  •  6
  •   zzzzBov    12 年前

    将所有内容封装在IIFE中,JSLint应予以批准。

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

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

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

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

    @zzzzBov公司 的解决方案在浏览器和后端环境中也能很好地工作。

        2
  •  2
  •   zzzzBov    12 年前

    把所有东西都包起来 IIFE ,别名全局引用,并在全局对象上显式设置全局变量:

    (function (root) { //could be window (browser), could be global (node)
        "use strict";
        ...code...
        root.apple = apple; //explicitly make apple a global variable
    }(this));
    
        3
  •  0
  •   Justin    9 年前

    如果您将名称空间用于对象文字,我最喜欢这种方法:

    (function (myApp) {
        'use strict';
    
        myApp.myObj = {
            init: function(){}           
        }
    
    }(window.myApp = window.myApp || {}));
    
    myApp.myObj.init();