0

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

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

function b(){
// Body
}

function isStrict(fn){

    fn.call();
}

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

2 回答 2

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"函数主体开头的模式。

为了检测全局严格模式(这也会影响一个函数),我会测试其中一个功能以查看严格模式是否处于活动状态。

于 2012-07-17T22:07:10.057 回答
1

isStrict您可以为您设置严格的每个函数添加一个属性。

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

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