是否可以判断某个函数是否处于严格模式?

时间:2012-07-17 22:03:20

标签: javascript

我的问题可能听起来很奇怪,但有没有办法通过调用另一个函数来了解函数是否处于严格模式?

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

function b(){
// Body
}

function isStrict(fn){

    fn.call();
}

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

2 个答案:

答案 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 ) { }