本文共 1418 字,大约阅读时间需要 4 分钟。
基本用法
用来声明变量。它的用法类似于var,但是let声明的变量,只在let命令所在的代码块内有效。{ var bb = 1; let aa = 10;}console.log(bb); //1console.log(aa);//Uncaught ReferenceError: aa is not defined
结果如图:
let不会像var那样会有“变量提升”的现象。当let声明的变量一定要在声明后使用,否则会报错。
console.log(s1); // 输出undefinedconsole.log(s2); // 报错Cannot access 's2' before initializationvar s1 = 2;let s2 = 2;
结果如图:
上面代码中,var声明的s1被提前,所以输出时是undefined,但let声明的变量不存在提前,因此会报错。if (true) { test = 'abc'; //Uncaught ReferenceError: Cannot access 'test' before initialization let test;}
结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210606101657553.png使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。
let不允许在相同作用域内,重复声明同一个变量。
// 报错function () { let a = 10; var a = 1;}
结果:
function niu() { let a = 10; let a = 1;}
结果:
const声明一个只读的常量。一旦声明,常量的值就不能改变。
const cl = "常量"cl = "我要改变"
如图:
const一旦声明变量,就必须立即赋值,不能之后赋值。
const test;//Uncaught SyntaxError: Missing initializer in const declaration
如图:
const命令声明的常量也是不会有声明提升的,同样也存在暂时性死区,只能在声明的位置后面使用。
if (true) { console.log(MAX); // ReferenceError const MAX = 5;}
如图:
const声明的常量,也与let一样不可重复声明。
if (true) { const message = "Goodbye!"; const message = 30; }
如图:
!!!对于引用类型数据,const只是保证引用类型的地址不变,但并不是保证引用类型的属性和方法不可改变
const test = { };test.prop = 123;test.prop// 123test = { }; // Uncaught TypeError
如图:
转载地址:http://vwezi.baihongyu.com/