私の質問は奇妙に聞こえるかもしれませんが、別の関数から呼び出すことによって、関数が厳密モードにあるかどうかを理解する方法はありますか?
function a(){
"use strict";
// Body
}
function b(){
// Body
}
function isStrict(fn){
fn.call();
}
isStrict(a); // true
isStrict(b); // false
私の質問は奇妙に聞こえるかもしれませんが、別の関数から呼び出すことによって、関数が厳密モードにあるかどうかを理解する方法はありますか?
function a(){
"use strict";
// Body
}
function b(){
// Body
}
function isStrict(fn){
fn.call();
}
isStrict(a); // true
isStrict(b); // false
関数が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つをテストして、ストリクトモードがアクティブかどうかを確認します。
isStrict
厳密にする各関数にプロパティを追加できます。
function a() {
"use strict";
}
a.isStrict = true;
// ...
if ( a.isStrict ) { }