var sum = function(a, b) {return a + b;};
var add = sum;
delete sum;
執行刪除它在控制檯返回False後。理想情況下,它應該返回True。 爲什麼總和功能沒有刪除?爲什麼我們無法使用刪除操作符刪除javascript中的函數?
注意上面的代碼在谷歌瀏覽器的控制檯執行。
var sum = function(a, b) {return a + b;};
var add = sum;
delete sum;
執行刪除它在控制檯返回False後。理想情況下,它應該返回True。 爲什麼總和功能沒有刪除?爲什麼我們無法使用刪除操作符刪除javascript中的函數?
注意上面的代碼在谷歌瀏覽器的控制檯執行。
從MDN:
delete操作符從對象中移除給定屬性。
如果您嘗試刪除的屬性不存在,刪除將不會產生任何效果並返回true。
如果該對象的原型鏈中存在具有相同名稱的屬性,然後,刪除後,該對象將使用來自原型鏈的屬性(換句話說,只刪除對自身屬性的影響)。
使用var聲明的任何屬性,不能從全局範圍或功能的範圍中刪除。
因此,刪除不能刪除全局範圍內的任何函數(無論這是函數定義還是函數表達式的一部分)。
作爲對象的一部分(除了全局作用域)的函數可以通過刪除來刪除。
因此sum
這是一個附加到全局範圍的函數,不能用delete刪除。
@Aniketbonagir你可以運行我的演示並分享結果嗎? –
@Aniketbonagir:不要將範圍與綁定混淆。全局範圍內的變量**也**被添加到全局對象中是一種方便。這並不意味着全局對象是一個範圍。範圍不是對象。 – slebetman
謝謝@slebetman –
MDN參見
即使您刪除了var,您也無法刪除。你可以在沒有var的情況下執行上面的代碼它仍然會返回false。 –
雖然在瀏覽器控制檯中運行這些代碼會產生錯誤。 –
@YangShun你能分享一個截圖嗎? –
直接在瀏覽器中粘貼代碼顯示false:http://prnt.sc/erexsg –