JS基础知识(二十四):var、let、const

var、let、const

1、变量声明与赋值
方式描述
var 声明的变量可以重新声明和重新分配
let 声明的变量不可以重新声明和但可以重新分配
const声明的变量不能重新声明也不能重新分配

PS:没有使用var,let,const声明的变量,都属于全局变量

2、var作用域——全局、函数

var声明的变量是函数作用域或者是全局作用域
当var声明的变量是全局变量时,他会在window上面创建一个同名的全局属性
当在函数内部用var声明变量时,该变量的作用域为该函数

3、let作用域——块(script、函数、循环)

用let声明的变量是全局变量时,不会在window上创建一个同名的全局属性
在函数内部用let声明的变量时,作用域为该函数,通俗的说局部变量(这一点跟var一样)
在块里面用let声明的变量,其作用域为该块作用域,而var声明的变量则不受块作用域影响
PS:一个函数相当于一个块(局部),script标签包裹的内容也相当于块(全局)let声明的全局变量属于全局作用域scope的script

4、const作用域——块(script、函数、循环)

用const声明的变量是全局变量时,不会在window上创建一个同名的全局属性
在函数内部用const声明变量时,作用域为该函数,通俗的说局部变量(这一点同var,let)
在块里面用const声明的变量,其作用域为该块作用域
参考博客:https://zhuanlan.zhihu.com/p/31444950

5、区别
变量声明、重新分配、初始化、变量提升

var 声明的变量是可以重新声明和重新分配,支持变量提升,声明时可以不初始化
let 声明的变量是不可重新声明和但可以重新分配,不支持变量提升,声明时可不初始化
const声明的变量不能重新声明也不能重新分配,不支持变量提升,声明时必须初始化

变量的作用域

var:全局作用域和函数作用域,全局变量具有全局作用域,局部变量具有局部作用域
let:只有块级作用域,let和const声明的变量具有块级作用域
js只支持全局作用域和函数作用域,不支持块作用域,因此使用let、const支持块作用域
参考:https://www.cnblogs.com/xjt31/p/13990721.html

PS:其实let、const的变量提升了,但只是不能使用,事实上,当 JS 引擎检视下面的代码块有变量声明时,对于 var 声明的变量,会将声明提升到函数或全局作用域的顶部,而对 let 或 const 的时候会将声明放在暂时性死区内。任何在暂时性死区内访问变量的企图都会导致“运行时”错误(runtime error)。只有执行到变量的声明语句时,该变量才会从暂时性死区内被移除并可以安全使用。

PS:全局对象是最顶层的对象,在浏览器环境下指的是window对象,在node指的是global对象。ES5中,全局对象的属性和全局变量是等价的。未使用var let const声明的变量,自动成为全局对象window的属性,这被认为是js的最大败笔。ES6为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是全局对象的属性,另一方面规定,let,const,class命令声明的全局变量不属于全局对象的属性。也就是说,从ES6开始,全局变量将逐渐与全局对象的属性脱钩。

delete用来删除js对象的属性,不能删除任何变量(全局、局部、原型链中的变量)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值