我的问题可能听起来很奇怪,但有没有办法通过调用另一个函数来了解函数是否处于严格模式?
function a(){
"use strict";
// Body
}
function b(){
// Body
}
function isStrict(fn){
fn.call();
}
isStrict(a); // true
isStrict(b); // false
答案 0 :(得分:3)
当一个函数受到严格模式的影响时,"use strict";
会被添加到前面。所以,以下检查就可以了:
function isStrict(fn) {
return typeof fn == 'function' &&
/^function[^(]*\([^)]*\)\s*\{\s*(["'])use strict\1/.test(fn.toString())
|| (function(){ return this === undefined;})();
}
我使用RegExp在函数体的开头查找"use strict"
模式。
要检测全局严格模式(也影响函数),我test one of the features查看严格模式是否有效。
答案 1 :(得分:1)
您可以为每个严格执行的功能添加isStrict
属性。
function a() {
"use strict";
}
a.isStrict = true;
// ...
if ( a.isStrict ) { }