var 与 let
var 声明大家都很熟悉,是js中最常用的变量声明方式;而let是es6中加入的新的声明方式,接下来我会对二者的区别进行简要的分析,
作用范围
var的方式,是与函数作用于绑定的,var即在函数中存在(ES6之前js不区分代码块的),而let是仅存在与当前的块级作用域绑定,它不会在代码块之外存在,也不会在内的其他代码块存在,称之为暂时性死区;如下例子:
// var
var a= 'a';
var fun = function(){
var b = 'b';
console.log(a);
}
fun(); //输出a
console.log(b); //错误
//let
let c = 'c';
{
let c = 'd';
console.log(c); //输出'd'
}
console.log(c); //输出'c'
变量提升
var是存在变量提升的,即声明提升到函数顶部,而let不会提升,所以在声明前使用会报错。
// var
console.log(v); // 输出undefined
var v= 2;
//var 等同于如下代码
var v;
console.log(v); // 输出undefined
v= 2;
// let
console.log(l); // 报错
let l= 2;
不允许重复声明
var的重复声明会进行覆盖,而let不允许重复声明。
//var var
function fun() {
var a = 1;
var a = 2;
console.log(a); //输出2
}
// var let ,报错
function fun() {
var a = 1;
let a = 2; //Uncaught SyntaxError: Identifier 'a' has already been declared
}
//let var ,报错
function fun() {
let a = 1;
var a = 2;
}
//let let ,报错
function fun() {
let a = 1;
leta = 2;
}