1,基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 2,特点
特点一:使用let关键字声明的变量具有块级作用域,声明的变量只在所处于的块级有效 (块级作用域:在大括号中产生的作用域) if (true) { let num = 100; var abc = 200; } console.log(abc); //200 console.log(num); //error:num is not definedlet声明的num变量,只存在于块级作用域(在大括号中产生的作用域)因此报错。
由于这个特性,let可以用来防止循环变量变成全局变量 例如:循环中的计数器,当循环结束时,计数器就没必要存在了
for (var i = 0; i < 5; i++) { } console.log(i); //5 for (let j = 0; j < 5; j++) { } console.log(j); //error: j is not defined用let声明的计数器j,只存在for循环中的块级作用域,不会成为全局变量,因此报错。
特点二:let声明的变量,不存在变量提升,只能先声明后使用 console.log(a); //a is not defined let a = 20;上面这段代码,由于let声明不存在变量提升,所以会报错
特点三:let声明的变量,具有暂时性死区特性 var tmp = 10; if (true) { console.log(tmp); //tmp is not defined let tmp = 20; }上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。
特点四:let不允许在相同作用域内,重复声明同一个变量。 // 报错 function func() { let a = 10; var a = 1; } // 报错 function func() { let a = 10; let a = 1; }1,基本用法 const声明一个只读的常量。一旦声明,常量的值就不能改变。 2,特点
特点一:一旦声明,常量的值就不能改变 const PI = 3.1415; PI // 3.1415 PI = 3; // TypeError: Assignment to constant variable.上面代码表明改变常量的值会报错。
特点二:const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。 const foo; // SyntaxError: Missing initializer in const declaration上面代码表示,对于const来说,只声明不赋值,就会报错。
特点三:const的作用域与let命令相同:只在声明所在的块级作用域内有效。 if (true) { const MAX = 5; } MAX // Uncaught ReferenceError: MAX is not defined 特点四:const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。 if (true) { console.log(MAX); // ReferenceError const MAX = 5; }上面代码在常量MAX声明之前就调用,结果报错。
特点五:const声明的常量,也与let一样不可重复声明。 var message = "Hello!"; let age = 25; // 以下两行都会报错 const message = "Goodbye!"; const age = 30;