ES6 let和const

本文详细介绍了JavaScript ES6中的let和const关键字,与传统的var进行对比。let声明的变量只在其所在代码块内有效,不能重复声明,并不存在变量提升;const用于声明常量,一旦赋值不可更改,同样不具有变量提升。文中通过实例展示了它们在for循环中的行为差异,并探讨了在实际开发中的适用场景。
摘要由CSDN通过智能技术生成

let和const是ES6新增的两个重要的JavaScript关键字,用于声明变量

let

(1) 概念:let声明的变量只在let命令所在的代码块内有效
(2) 基本用法

{
    let a = 0;
    console.log(a); // 0
}
console.log(a); // 报错

(3) 特点
① 只在代码块内有效:let 是在代码块内有效,var 是在全局范围内有效

{
    let a = 0;
    var b = 1;
}
console.log(a); // 报错
console.log(b); // 1

② 不能重复声明:let 只能声明一次 ,var 可以声明多次

let a = 1;
let a = 2; //报错
var b = 3;
var b = 4;
console.log(a);
console.log(b); // 4

(4) let和var在for循环中的使用

for (var i = 0; i < 10; i++) {
    setTimeout(function() {
        console.log(i); // 输出十个 10
    })
}

for (let j = 0; j < 10; j++) {
    setTimeout(function() {
        console.log(j); // 输出 0123456789
    })
}

var:var声明的变量i在全局范围内有效,所以全局中只有一个变量i,每次循环时,setTimeout 定时器里面的 i 指的是全局变量 i ,而循环里的十个 setTimeout 是在循环结束后才执行,所以此时的 i 都是 10。

let:let声明的变量只在本轮循环中有效,每次循环j都是一个新的变量,所以 setTimeout 定时器里面的 j 其实是不同的变量,即最后输出 12345。(若每次循环的变量 j 都是重新声明的,如何知道前一个循环的值?这是因为 JavaScript 引擎内部会记住前一个循环的值)。

(5) let不存在变量提升(即预解析)

console.log(a); //报错
let a = "apple";

console.log(b); //undefined
var b = "banana";

预解析详细:https://blog.csdn.net/qq_54282411/article/details/120524767?spm=1001.2014.3001.5501

const

(1) 概念:const声明一个只读的常量,一旦声明,常量的值就不能改变。意味着一旦声明必须初始化,否则会报错。
(2) 基本用法

const PI = "3.1415926";
console.log(PI); // 3.1415926

const MY_AGE; //SyntaxError: Missing initializer in const declaration

(3) 不存在变量提升

var PI = "a";
if (true) {
    console.log(PI); //报错
    const PI = "3.1415926";
}

ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错。

区别

var声明的是全局变量,可以被修改,可以重复声明

for (var i = 0; i < 10; i++) {
    var a = 10;
    console.log(a); //输出十个10
}
console.log(a); //输出10

for (var i = 0; i < 10; i++) {
    var a = 10;
    a = 20; //修改
    console.log(a); //输出十个20
}
console.log(a); //输出20

for (var i = 0; i < 10; i++) {
    var a = 10;
    var a = 30; //重复声明
    console.log(a); //输出十个30
}
console.log(a); //输出30

let声明的变量为一个代码块里的变量,可以被修改,但是不能被重复声明

for (var i = 0; i < 10; i++) {
    let a = 20;
    console.log(a); //输出十个20
}
console.log(a); //报错,找不到a
for (var i = 0; i < 10; i++) {
    let a = 20;
    a = 30; //修改
    console.log(a); //输出十个30
}
console.log(a); //报错,找不到a
for (var i = 0; i < 10; i++) {
    let a = 20;
    let a = 40; //报错不能重新声明,后面的代码不被执行
    console.log(a);
}
console.log(a);

const声明的变量为一个代码块里的变量,不可以被修改,不能被重复声明(如果const声明了一个数组,不能直接向数组里面添加值,只能通过push()向数组内部传值)

for (var i = 0; i < 10; i++) {
    const a = 30;
    console.log(a); //输出十个30
}
console.log(a); //报错,找不到a
for (var i = 0; i < 10; i++) {
    const a = 30;
    a = 40; //报错不能重新赋值,后面的代码不被执行
    console.log(a);
}
console.log(a);
for (var i = 0; i < 10; i++) {
    const a = 30;
    const a = 50; //报错不能重新声明,后面的代码不被执行
    console.log(a);
}
console.log(a);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值