var有声明提升的功能:分为变量声明提升和函数声明提升
1.变量声明提升
就是会把var声明的变量提到最前面去,但是值不会跟着上去。
输出结果为underfine,这是为什么呢?
这是因为var会变量声明提升功能,它的实际执行顺序为:
所以输出结果是underfine。
2.函数声明提升
众所周知,在javascript中一共有两种方式来声明函数:函数声明式和函数表达式。
函数声明式是指直接定义函数,函数表达式是把定义好的函数赋给某个变量。
但是只有函数声明式是有函数声明提升,函数表达式不会进行变量提升,所以只有函数声明式可以在定义之前使用。
此时打印的结果为 hello world
此时打印的结果为报错Uncaught TypeError: fun is not a function
这是因为执行时会把hi提升到最前面,但是后面赋值的函数不会跟着提升,所以以函数形式调用会报错。
3.函数声明提升和变量声明提升的比较
相信大家都有一个疑问,既然它们两个都会提升,那谁在前谁在后呢?
如果是变量声明提升的优先级高的话应该输出的是underfine;
如果是函数声明变量提升应该声明的是function;
结果为function,所以得出结论: 函数声明提升的优先级高于变量声明提升。