2014-02-06 135 views
0

以下是從this question什麼是(0,eval)()呢?

function q() { 
console.log((0, eval)('this')); 
} 

它返回[對象窗口。

我得不到的是(0,eval)部分。

JS在做什麼?

從鏈接,它說它是間接調用eval()。間接意味着什麼?

+0

我的問題是更多關於(0,EVAL)的一部分,它現在已經指出,作爲一個用逗號的 –

回答

3

其實,剛纔看到(1,eval)('this') vs eval('this') in JavaScript?,我現在已經投爲重複:

..在了Ecma規範認爲一個參考EVAL是一個「直接的eval呼叫」,但是一個表達式,僅僅產生eval是間接的 - 並且間接的eval調用保證在全局範圍內執行。

(雖然以下是[大多]真實的,它是不是特定eval用法。)


comma operator評估所有表達式併產生最後一個表達式的值。

也就是說,(0, eval)的計算結果爲eval(這是一個函數對象值),因此得到的表達式等效於eval('this')

要看到它的另一種方式:(這回答我的問題)

var f = (0, eval) 
f === eval // true 
f('this')