目录
一、变量的使用
ES2015 引入了两个重要的 JavaScript 新关键词:let
和 const
。
这两个关键字在 JavaScript 中提供了块作用域(Block Scope)变量(和常量)。
在 ES2015 之前,JavaScript 只有两种类型的作用域:全局作用域 和 函数作用域
一、let变量
1. let声明的变量具有块级作用域
可以使用 let
关键词声明拥有块作用域的变量。在块 { } 内声明的变量无法从块外访问
let a=1;
if(true){
let b=2;
console.log(a); //1
console.log(b); //2
}
console.log(a); //1
console.log(b); //Uncaught ReferenceError: b is not defined
注意:使用 let 关键字声明的变量才具有块级作用域,使用 var 声明的变量不具备块级作用域特性。
2. for循环使用let变量
防止循环变量变成全局变量
for(let i=0;i<3;i++){
console.log(i); //2
}
console.log(i); //未定义,相当于在for前面定义了一个全局变量let i;
3. 不存在变量提升
var 变量 可以在变量声明前使用,多少有点奇怪,为了纠正这个现象,let改变了这个语法。
console.log(i);//报错 程序是一步步往下执行,此相当于在前面定义了一个变量let i;
let i=2;
console.log(i);
注意:所有变量都要先声明,再使用。
4. 暂时性死区
用let声明的变量需要先声明后使用
只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。
var i=1;
if(true){
i=2;
let i=3;
}