2017-08-11 93 views
7

在Javascript中,使用a.b(c)[a.b][0](c)的原因是this與對象a的綁定,或者在執行代碼a.b的過程中不使用。保證`Math.cos(0)=== [Math.cos] [0](0)`?

繼使用

var z = Math.cos; 
console.log(z(1)); 

在理論上是從console.log(Math.cos(1))不同,但在實踐中似乎並不那麼同樣的道理。

的問題是:它的標準保證像MathSymbolObject預定義的對象this上下文無關以合規的實施?

隨着Math這個問題似乎是愚蠢的,因爲顯然沒有理由依賴於上下文...但是例如用於Symbol.for這是合理的假設的實現可以在全局符號表存儲在一個對象成員在這種情況下,使用[Symbol.for][0]("x")不起作用。

Symbol.for確實似乎沒有節點,Chrome和Firefox方面做工精細,但我不知道這是保證或只是偶然......

+0

你的問題似乎假設對於Math庫而言,這個上下文對結果有影響,我不確定數學庫爲什麼會對'this'上下文做任何事情。那麼爲什麼這對你有什麼影響呢? – Icepickle

+0

@Ippickle這是一個什麼樣的問題? – melpomene

+0

'this'綁定如何影響js內置數學函數的返回值? – chiliNUT

回答

5

Math object的說明書中沒有提及任何使用this value的。

由於函數依賴於this,因此規範的其他部分很明確,我相信這表示上下文與這些函數無關,您可以在沒有任何上下文的情況下安全地調用它們。