在简单的一次尝试中发现了问题,上图:
图一:

图二:
这种情况发生的原因是什么呢?
有var的是已声明变量,没有var的是未声明变量。在MND的var词条中有这样的描述:
将赋值给未声明变量的值在执行赋值时将其隐式地创建为全局变量(它将成为全局对象的属性)。声明和未声明变量之间的差异是:
- 声明变量的作用域限制在其声明位置的上下文中,而非声明变量总是全局的。
- 声明变量在任何代码执行前创建,而非声明变量只有在执行赋值操作的时候才会被创建。
- 声明变量是它所在上下文环境的不可配置属性,非声明变量是可配置的(如非声明变量可以被删除)。
我是否可以这样理解:未声明变量,即隐含全局变量,严格来说不是真正的变量,而是全局对象的属性。已声明变量是真正的变量,无法使用this访问或者删除。
再用一个例子验证我的想法:
delete方法可以删除对象的属性。
使用var声明的a变量无法删除,而b删除成功。