(1)问题:var的两个问题:
i.会被声明提前---打乱程序正常的执行顺序
ii.没有块级作用域---代码块内的变量会超出代码块的范围,影响外部的变量
块级作用域:指除了对象{}和function的{}之外,其余if else、for、等程序结构的{}范 围,在其他语言中称为块级作用域。但是,在Js中这些{}都不是作用 域。拦不住内部的局部变量声明被提前。
(2)解决:今后,只要声明变量,都推荐使用let代替var
(3)优点:2个
i.不会被声明提前----保证程序顺利执行
ii.让程序块,也变成了块级作用域。----保证块内的变量,不会影响外快的变量
(4)let本质:底层会被翻译为匿名函数自调
(5)let的小脾气:
i.因为不会声明提前,所以不能在声明变量之前,提前使用该变量。
ii.在相同的作用域内,禁止声明两个同名的变量
iii.因为let底层相当于匿名函数自调,所以,即使在全局创建的let变量,在window中也找不 到