7

そのため、匿名関数内でグローバルオブジェクト(当時の環境によってはウィンドウではなかった可能性があります)を見つけることができるため、その単純さの点で率直に言って美しい関数を見ました。ただし、JavaScriptの「usestrict」をスローすると、キーワード「this」の評価が変化するため、モードが崩れます。これを達成するためのいくつかの方法がありましたか?

(function () {
    var win = function () {
        return (function () {
                return this;
            }());
        };
    //win now points to the global object no matter where it is called.
}());

さて、これらが「use strict」のコンテキスト内で呼び出された場合、説明されている機能が失われますが、ES5 strictモードで実行できる同等のものはありますか?

参考のために

(function () {
    "use strict"
    //code here is in strict mode
}())
4

3 に答える 3

8
于 2011-09-02T23:36:59.507 に答える
8

解決:

var global = Function('return this')();

すべてのブラウザ、エンジン、ES3、ES5、厳密、ネストされたスコープなどで動作します。

わずかなバリエーションがJSLINTを通過します。

var FN = Function, global = FN('return this')();

討論

JavaScriptでグローバルオブジェクトを取得する方法を参照してください。

于 2011-09-07T23:56:40.930 に答える
1

これは、グローバル評価を使用したPerfectionKillsの抜粋です。

var root = (function () {
    return this || (0 || eval)('this');
}());

ECMA3、ECMA5、Strictモードなどと互換性があり、JSLintに合格します。

于 2012-01-12T15:44:35.747 に答える