我的问题听起来很奇怪,但有没有办法通过从另一个函数调用来理解函数是否处于严格模式?是否可以判断一个函数是否处于严格模式?
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
当一个函数受严格模式影响时,"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看看严格模式是否有效。
您可以将isStrict
属性添加到您严格执行的每个功能中。
function a() {
"use strict";
}
a.isStrict = true;
// ...
if (a.isStrict) { }
我知道这是不是我的问题,但我真的不明白怎么可能知道,在编译时,除非你在函数内部操纵回调有用。在这种情况下,而不是你的回调,传递一个测试回调,在严格模式的情况下会崩溃,所以你可以在上面捕获错误,并在之后假设严格。 – Sebas 2012-07-17 22:19:24