在簡單的一次嘗試中發現了問題,上圖:
圖一:

圖二:
這種情況發生的原因是什麼呢?
有var的是已聲明變量,沒有var的是未聲明變量。在MND的var詞條中有這樣的描述:
将指派給未聲明變量的值在執行指派時将其隐式地建立為全局變量(它将成為全局對象的屬性)。聲明和未聲明變量之間的差異是:
- 聲明變量的作用域限制在其聲明位置的上下文中,而非聲明變量總是全局的。
- 聲明變量在任何代碼執行前建立,而非聲明變量隻有在執行指派操作的時候才會被建立。
- 聲明變量是它所在上下文環境的不可配置屬性,非聲明變量是可配置的(如非聲明變量可以被删除)。
我是否可以這樣了解:未聲明變量,即隐含全局變量,嚴格來說不是真正的變量,而是全局對象的屬性。已聲明變量是真正的變量,無法使用this通路或者删除。
再用一個例子驗證我的想法:
delete方法可以删除對象的屬性。
使用var聲明的a變量無法删除,而b删除成功。