一、块级作用域
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。比如:
function f1(){
let n = 5;
if(true){
let n = 10;
}
console.log(n);// 5
}
二、不存在变量提升
var命令会发生变量提升的现象,即变量可以在生命前使用,且值为undefined(因为变量提升会让变量的声明提前到当前作用域最上面)。而let命令就改变了这一语法:
//var 情况
console.log(foo); //undefined
var foo = 2;
//let 情况
console.log(bar);//报错
let bar = 2;
三、暂时性死区
在块级作用域内使用let命令,不会受到外部影响:
var tmp = 123;
if(true){
tmp = 'abc';//报错
let tmp;
}
上述代码中,存在全局变量tmp,但在块级作用域内let又声明了一个局部变量tmp,导致后者绑定在这个块级作用域,因此在let声明之前,对tmp的操作都会报错。总结:暂时性死区的本质就是,只要进入当前作用域,所要使用的变量就已经存在,但不可获取,只要声明之后,才可获取和使用该变量。
四、不允许重复声明
let不允许在相同作用域内重复声明同一个变量:
//报错
function(){
let a = 10;
var = 10;
}
//报错
function(){
let a = 10;
let a = 5;
}
//不报错
function(){
let a = 10;
{
let a = 5;
}
}
网友评论