let和const命令

目录

一. var命令

1. 作用域

2. 变量提升(hoisting)

二. let命令 

1. 用法

2. 暂时性死区 

三. const命令

1. 用法

2. 本质 

参考文章


一. var命令

1. 作用域

var属于ES5的语法,只有两种作用域:

  • 函数外部声明的变量,属于全局作用域,变量在整个程序中一直存在;
  • 函数内部定义的变量,属于函数作用域,变量只在函数内部存在,外部无法读取。
2. 变量提升(hoisting)
  • var声明的变量会被提升到其所在作用域的顶部,但只是声明的提升,赋值不会提升。 
  • 使用function命令声明函数,整个函数会像变量声明一样,被提升到代码头部。

二. let命令 

1. 用法
  • let声明的变量只在它所在的代码块有效
  • 同一个作用域,不可使用let重复声明同一个变量,不能在函数内部最外层重新声明参数
  • 进入当前作用域,let所声明的变量就不再受外部影响,但在声明语句之前,不可使用该变量

for循环例子:let声明的i只在本轮循环有效,每一次循环的i其实都是一个新变量

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
// abc
// abc
// abc

另外,for循环还有一个特别之处,设置循环变量的部分是一个父作用域,循环体内部是一个单独的子作用域。

2. 暂时性死区 

在代码块内用let或const声明变量后,从块的开始到声明语句之前的区域,变量是不可访问的,这个区域就是暂时性死区TDZ,任何访问该变量的行为都会导致报错(ReferenceError)

三. const命令

1. 用法
  • const一旦声明变量,必须立即赋值,否则报错
  • const声明一个只读的常量,一旦声明,常量的值就不可改变,否则报错
  • 同一作用域下,不可重复声明同名的变量 
2. 本质 

 const实际保证的是,变量所指向的那个内存地址所保存的数据不得改动。对于简单类型的数据 (数值、字符串、布尔值),值就保存在变量所指的内存地址中,因此等同于常量;对于复合类型的数据 (对象、数组),内存地址中保存的是指向实际数据的指针。

参考文章

let和const命令 --- 阮一峰

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值