2017-04-02 37 views

回答

1

delete不能直接成員中刪除。

delete運算符從刪除的對象的屬性。

既然你給sum並且不告訴你想從哪個對象中刪除它。

你所尋找的是

delete window.sum 

現在它消除了sumwindow對象:)

demo

enter image description here

+0

雖然在瀏覽器控制檯中運行這些代碼會產生錯誤。 –

+0

@YangShun你能分享一個截圖嗎? –

+0

直接在瀏覽器中粘貼代碼顯示false:http://prnt.sc/erexsg –

1

MDN

delete操作符從對象中移除給定屬性。

如果您嘗試刪除的屬性不存在,刪除將不會產生任何效果並返回true。

如果該對象的原型鏈中存在具有相同名稱的屬性,然後,刪除後,該對象將使用來自原型鏈的屬性(換句話說,只刪除對自身屬性的影響)。

使用var聲明的任何屬性,不能從全局範圍或功能的範圍中刪除。

因此,刪除不能刪除全局範圍內的任何函數(無論這是函數定義還是函數表達式的一部分)。

作爲對象的一部分(除了全局作用域)的函數可以通過刪除來刪除。

因此sum這是一個附加到全局範圍的函數,不能用delete刪除。

+0

@Aniketbonagir你可以運行我的演示並分享結果嗎? –

+1

@Aniketbonagir:不要將範圍與綁定混淆。全局範圍內的變量**也**被添加到全局對象中是一種方便。這並不意味着全局對象是一個範圍。範圍不是對象。 – slebetman

+0

謝謝@slebetman –

0

MDN參見

  • delete運算符從刪除的對象的屬性。
  • 用var聲明的任何屬性都不能從全局作用域或函數的作用域中刪除。
  • 這樣,刪除在全球範圍內不能刪除任何功能(這是否是從一個函數定義或函數式的部分)。
  • 作爲對象的一部分(除了全局作用域)的函數可以使用刪除來刪除。
+0

即使您刪除了var,您也無法刪除。你可以在沒有var的情況下執行上面的代碼它仍然會返回false。 –

相關問題