JavaScript函数中不用var声明变量,会声明一个全局变量?
在函数中用var声明一个局部变量,只在函数内可以访问,在函数外是无法访问的。当不用var声明,直接初始化变量时,变量会被添加到全局执行环境中,当函数执行完之后,依旧可以在函数外访问变量。
1 | function plus() { |
以上是理解并没有什么问题。但有种说法:
在函数中不用var声明变量会声明一个全局变量.
这种说法是错误的,错误的!
没有使用var声明,这根本就没有声明一个变量,而是直接赋值。为什么能直接赋值?先看个例子:
1 | var obj = { |
上面例子中,直接给对象obj添加属性a,并赋值1;
而没有var声明的变量,也是这个原理。
在函数中没有var声明就直接给变量赋值,就是给window对象添加属性,属性名就是变量名。
这种方式得到的window属性是可以用delete删除的。用var在全局作用域声明变量,会当做全局对象的属性。但var 声明的变量是无法用delete删除的。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 plusye的博客!
评论