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 に答える