ES6-let和const命令

本文详细介绍了ES6中的let和const命令,以及它们带来的块级作用域概念。let命令用于声明变量,解决了var命令的一些问题,如变量提升和在循环中的作用域。const则用于声明常量,一旦赋值后不能更改。此外,还探讨了块级作用域的特点,包括临时性死区和变量绑定。通过对这些概念的理解,开发者能更好地组织和管理代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6-let和const命令

在阮一峰老师的ES6文章中,已经很详细的介绍了let和const命令.

let命令

let命令是ES6新增的,用来声明变量。用法类似于var,但是let命令只在代码块内有效。

  • 基本用法
{
  let b = 10000;
  var c = 1000;
}
b // 报错:ReferenceError:a is not defined
c // 1000 
  • 循环中使用let命令
for(let i = 0; i < 5; i++){
  //segment
  //...
}
console.log(i);//ReferenceError:i is not defined
for(var i = 0;i < 5; i++){
  //segment
  //...
}
console.log(i);//5

let 定义的i只在循环体中有效,而var命令定义的i是全局的变量

  • let不存在变量提升
//var命令的变量提升
console.log(aaa);
var aaa = 2;
//等价于
var aaa;
console.log(aaa);
aaa = 2;

//let命令不存在变量提升
console.log(bbb);//报错ReferenceError
let bbb = 2;
  • 暂时性死区

    • 只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响

    • 在代码块内,使用let命令声明变量之前,该变量都是不可用的

var a = 111;
if (true){
  a = 222;//ReferenceError
  let a;
}//在let命令声明变量tmp之前,都属于变量tmp的“死区”。
  • 不允许重复声明
{
  let a = 10;//let命令重复声明,导致报错
  var a = 100;
  
  let b = 100;//相同报错,不可重复声明
  let b = 10;
}

块级作用域

所谓块级作用域,就是一个代码块,由一个花括号包裹。

//举例1:以下就是一个最普通的代码块
{
  //segment1;
  //segment2;
  //segment3;
  //...
}
//举例2:这是一个for循环
// 花括号中也是一个代码块,let命令定义的a只在这循环中有用
for(let i = 0 ; i < 2 ; i++){
 	let a = 10;
  var b = 0;
}
console.log(a);//报错
console.log(b);//0
  • 块级作用域可以任意嵌套
{
  {
    {
      {
        let c = 0;
      }
      console.log(c);//报错
    }
  }
}

const命令

const命令声明的是一个只读的常量。

  • 一旦声明,常量的值就不允许改变。
const PI = 3.1415926;
console.log(PI);//3.1415926

PI = 3;
//TypeError: Assignment to constant variable.
  • 一旦创建,必须赋初值
const PI;
//SyntaxError:Missing initializer in const declaration
  • 作用域let命令相同:只在声明所在的块级作用域内有效
{
  const PI = 3.1415926;
}
console.log(PI);//Uncaught ReferenceError:PI is not defined
  • const命令不存在提升
console.log(PI);//ReferenceError
const PI = 3.1415926;

顶层对象的属性

顶层对象,在流浪器环境指的是window对象

  • 顶层对象的属性赋值与全局变量的赋值
window.a = 1;
console.log(a);//1
a = 2;
window.a //2
  • var命令function命令声明的全局变量,依旧是顶层对象的属性
  • let命令const命令class命令声明的全局变量,不属于顶层对象的属性
以上就是let和const命令的全部内容了,若有出错,请及时指出,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值