💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
[TOC] ## let ES6中新增的用于声明变量的关键字。 ●let声明的变量只在所处于的块级有效 ~~~ if (true) { let a=10; } console.log(a) // a is not defined ~~~ 注意:使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性。 ●不存在变量提升 ~~~ console.log(a) ; // a is not defined leta=20; ~~~ ●暂时性死区 ~~~ var tmp = 123; if (true) { tmp = 'abc' ; let tmp; } ~~~ ### let 经典面试题 var 循环体结束才调用 2不满足,跳出循环体,然后,调用函数,输出是2![](https://img.kancloud.cn/5d/a3/5da3171ffeca5f3507d386bfdd2e135b_1136x500.png) let![](https://img.kancloud.cn/56/a1/56a11bfdc00bac17eab1098b539b1381_1187x535.png) ## const 作用:声明常量,常量就是值(内存地址)不能变化的量。 ●具有块级作用域 ~~~ if (true) { const a = 10; } console.log(a) // a is not de fined ~~~ ●声明常量时必须赋值 ~~~ const PI; // Missing initializer in const declaration ~~~ ●常量赋值后, 值不能修改。 ~~~ const PI = 3.14; pI = 100; // Assignment to constant variable. ~~~ 复杂数据类型 (内部可以更改 不能重新赋值) ~~~ const ary = [100, 200]; ary[0] = 'a'; ary[1] = 'b'; console.log(ary); // ['a', 'b']; ary = ['a', 'b']; // Assignment to constant variable. ~~~ ## let、const、var的区别 ![](https://img.kancloud.cn/9f/23/9f23d88aafe78546d19612d1467abc2c_955x428.png)