javascriptES6中新增的用于声明变量的关键字。

本文深入探讨了JavaScript中的let和const关键字,包括它们的作用域特性,如块级作用域,以及与var的区别。let不允许变量提升,而const声明的常量在声明时必须赋值且不可更改。还提到了暂时性死区的概念,当在if语句中使用let声明变量时,会创建一个局部作用域,导致在此区域内无法访问之前的tmp变量。最后,文章通过一个面试题总结了let和const的使用规则及其区别。

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

let()

let声明的变量只在所处于的块级有效

if (true) { 
     let a = 10;
 }
  console.log(a) // a is not defined

let不可以变量提升

console.log(a); // a is not defined 
 let a = 20;

什么是变量提升

暂时性死区

 var tmp = 123;
 if (true) { 
   console.log(tmp);//tmp is not defined
     let tmp=20; 
 } 

上面代码中正常情况来说tmpif 循环中找不到tmp会向上找,但是let会让if这个循环产生暂时性死区,不会向上找

这里有一个面试题关于let的.
let面试题

const()

作用:声明常量,常量就是值(内存地址)不能变化的量。
和let一样有块级作用域

1,在声明变量的时候必须赋值

const a;// Missing initializer in const declaration

2,基本数据类型赋值不可以修改

 const pi=3.14;
        pi=2;//const在基础数据类型中不可以修改值

输出: Assignment to constant variable.
3,复杂数据类型修改值的方法

const ary = [100, 200];
 ary[0] = 'a';
 ary[1] = 'b';
 console.log(ary); // ['a', 'b']; 
 ary = ['a', 'b']; // Assignment to constant variable.

ary[0] = 'a';ary[1] = 'b’没有改变内存地址
ary = ['a', 'b']改变了内存地址,

这是因为数组在栈里面存放了内存地址,在堆里面为值开辟了空间,我们在调用的时候是用栈里面的内存地址去堆里面找到这个值,这种方法是引用访问,而且堆里面这个值是可以改变的,但是堆里面的值改变了,这个值的内存地址是没有改变的.ary[0]='a'中ary[0]指向的是堆里面的值,将'a'赋值给ary[0],只是改变了值,没有改变内存地址,所以可以修改.
ary = ['a', 'b']是重新在堆里面开辟了空间,有了空间,在栈里面内存地址也会改变.

let(),const(),var()的区别

  1. 使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。
  2. 使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。
  3. 使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值