1.let在块级作用域中起作用,也就是一个大括号,与var相比,在for循环中,if判断中设置let变量,出了他们的大括号旧不可用,而var可以,但是var如果在函数内部声明,外部也不可访问,此处了let和他一样
if(true){ let a =1; var b =2; } console.log(b); console.log(a);
var 作用在全局
var a = [] for(var i = 0;i<2;i++){ a[i] = function(){ console.log(i) } } a[1]();//2 a[0]();//2
let循环过程中产生块级作用域
var a = [] for(let i = 0;i<2;i++){ a[i] = function(){ console.log(i) } } a[1](); a[0]();
2.不会变量提升
3.暂时性死区,在块级作用域中若声明了一个变量,则其中的表达式会优先使用这个变量,若变量声明在表达式之后,则报错,变量提升问题,若使用var声明则为undefined
var aa =3; function a(){ console.log(aa); let aa =4; } a();
原文:https://www.cnblogs.com/huang131/p/13150564.html