我的問題聽起來很奇怪,但有沒有辦法通過從另一個函數調用來理解函數是否處於嚴格模式?是否可以判斷一個函數是否處於嚴格模式?
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