if (true) { let a = 10; var b = 20; console.log(a); console.log(b); } console.log(a);// a is not defined console.log(b);//b = 20 // a只在{}这个块级作用域生效,而在这个作用域之外的都是未定义。
在一个大括号中,使用了let关键字声明的变量才具有块级作用域。var关键字是不具备这个特点的。
防止循环变量变成全局变量
1 2 3 4 5 6
for (var i = 0;i<2;i++) { } console.log(i); //i = 2 for (let j = 0;j<2;j++) { } console.log(j);//j is not defined
不存在变量提升(旧语法中,变量可以不经声明直接使用,在ES6中这是错误的)
1 2
console.log(a);// a is not defined let a = 20;
暂时性死区特性,一旦在块级区域使用了let变量,则该变量会绑定区块,与区块外部无关。
1 2 3 4 5
var num = 10; if (true) { console.log(num);// num is not defined let num = 20; }
const
作用:声明常量,常量就是值(内存地址)不能改变的量。
具有块级作用域
1 2 3 4 5 6 7 8 9
if(true) { const a = 10; if (true) { const a = 20; console.log(a);// a = 20 } console.log(a);// a = 10 } console.log(a); // a is not defined
const声明常量必须赋值
1
const PI; // Missing initializr is const declaration
常量赋值后,值不能修改。
1 2 3 4 5 6 7 8 9
const PI = 3.14; PI = 100; // Assignmnt to constant variabl
if (true) { let a = 10; var b = 20; console.log(a); console.log(b); } console.log(a);// a is not defined console.log(b);//b = 20 // a只在{}这个块级作用域生效,而在这个作用域之外的都是未定义。
在一个大括号中,使用了let关键字声明的变量才具有块级作用域。var关键字是不具备这个特点的。
防止循环变量变成全局变量
1 2 3 4 5 6
for (var i = 0;i<2;i++) { } console.log(i); //i = 2 for (let j = 0;j<2;j++) { } console.log(j);//j is not defined
不存在变量提升(旧语法中,变量可以不经声明直接使用,在ES6中这是错误的)
1 2
console.log(a);// a is not defined let a = 20;
暂时性死区特性,一旦在块级区域使用了let变量,则该变量会绑定区块,与区块外部无关。
1 2 3 4 5
var num = 10; if (true) { console.log(num);// num is not defined let num = 20; }
const
作用:声明常量,常量就是值(内存地址)不能改变的量。
具有块级作用域
1 2 3 4 5 6 7 8 9
if(true) { const a = 10; if (true) { const a = 20; console.log(a);// a = 20 } console.log(a);// a = 10 } console.log(a); // a is not defined
const声明常量必须赋值
1
const PI; // Missing initializr is const declaration
常量赋值后,值不能修改。
1 2 3 4 5 6 7 8 9
const PI = 3.14; PI = 100; // Assignmnt to constant variabl