一、let与var的区别
1.let不存在变量的提升,存在暂时性死区。
var定义存在变量提升:
console.log(i)
var i=1;
//输出结果为 undefined
在js中有预解析,此例中i变量提升了,具体代码解析顺序。如下:
var c;
console.log(i) //所以最后结果为 undefined
i=1
使用let定义:
console.log(i)
let i=1;
//出现报错信息 Uncaught ReferenceError: i is not defined
出现报错信息,如下:
Uncaught ReferenceError: i is not defined
2.let同一个作用域下不能定义同一个名称。
代码块一:
//使用var重复定义是不会报错的 v
var num=1;
var num=100;
console.log(num)//输出结果为 100
代码块二:
//let同一个作用域重复定义会报错
let num=1;
let num=100;
console.log(num)//出现报错信息
代码块二报错信息,如下:
Uncaught SyntaxError: Identifier 'num' has already been declared
扩展:
let t=1;
t=100;//赋值
console.log(t) //输出结果 100
3.let有严格的作用域。
var的作用域只有函数与函数外。
function fun(){
var num=10;
if(ture){
var num=100
};
console.log(num)
};
fun()//输出结果 100
var定义的后面覆盖前面定义的,造成变量污染。
特别在开发中,不知道之前定义的变量名,后面再定义就会造成变量污染
let的作用域是块作用域(一对大括号就是一个作用域)
function fun(){
let num=10;
if(ture){
let num=100
};
console.log(num)
};
fun()//输出结果 10
let定义时,函数是一个作用域,if是一个作用域,不存在覆盖值。
输出在函数作用域所以输出函数作用域定义的值