0

私の質問は奇妙に聞こえるかもしれませんが、別の関数から呼び出すことによって、関数が厳密モードにあるかどうかを理解する方法はありますか?

function a(){
    "use strict";
    // Body
}

function b(){
// Body
}

function isStrict(fn){

    fn.call();
}

isStrict(a); // true
isStrict(b); // false
4

2 に答える 2

3

関数がstrictモードの影響を受ける場合、"use strict";が先頭に追加されます。したがって、次のチェックで問題ありません。

function isStrict(fn) {
    return typeof fn == 'function' &&
        /^function[^(]*\([^)]*\)\s*\{\s*(["'])use strict\1/.test(fn.toString())
        || (function(){ return this === undefined;})();
}

"use strict"RegExpを使用して、関数の本体の先頭にあるパターンを探しました。

グローバルストリクトモード(関数にも影響します)を検出するために、機能の1つをテストして、ストリクトモードがアクティブかどうかを確認します。

于 2012-07-17T22:07:10.057 に答える
1

isStrict厳密にする各関数にプロパティを追加できます。

function a() {
    "use strict";
}
a.isStrict = true;

// ...
if ( a.isStrict ) { }
于 2012-07-17T22:11:52.803 に答える