JS中包含两种提升,变量提升和函数提升。
变量提升
变量提升只能是var或者function声明的变量或者函数,let,const声明的不存在提升的说法。
顾名思义就是把下面的东西提升到上面。在函数域里定义一个和外部一样名称的变量时,只会取到该函数域,在赋值以前的输出为undefined。
在函数域内的if,for,switch语句中的变量无论条件是否满足都会得到提升,能够赋值与否要看是否满足条件。因此此处输出为2;如果!a变为a,则输出为undefined.
函数提升
定义函数有两种方式:函数声明和函数表达式。函数声明的函数才会提升函数(提升的其实是函数的引用,在声明之前可以调用),函数表达式提升的其实只是一个变量(调用会报错,因为只是一个变量)。