在JS中声明时用"var"与不用"var"到底是什么区别

第一点:带var的有变量提升,而不带var的没有变量提升,这个我理解,还有一个网上说 不加var它并不是声明了一个全局变量,而是创建了一个全局对象的属性。那加上var是声明了全局变量 那全局变量和全局对象的属性有什么不同吗

UYOU
浏览 457回答 1
1回答

长风秋雁

发现很多回答都集中在为什么使用var,并没有注意你关心的部分:[全局变量和全局对象的属性有什么区别]ES5中,全局变量和全局对象的属性是等价的,因此,全局对象的属性赋值与全局变量的赋值也是等价的。ES6中 var和function声明的全局变量,依旧是全局对象的属性,而let和const命令声明的全局变量,不属于全局对象的属性。全局对象的属性将与全局变量脱钩。其实我觉得var声明最必要的部分应该是 使用var声明的变量是当前作用域,而不使用直接添加到全局变量(ES5中也是全局对象属性),这才是最关键的部分。(个人观点,且上面1,2点是对你疑惑的解答)[更新]关于为什么let和const不会覆盖掉window的属性,NICHOLAS进行了比较详细的说明,引用如下图:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript