提升
JavaScript代码在执行的时候并不是完全按照从上到下一行一行执行的。
包含变量和函数在内的所有声明都会在任何代码被执行前首先被处理。
var a =2;
var a;定义声明在编译阶段进行,
a=2;赋值声明会被留在原地等待执行阶段。
1.提升
变量和函数的声明从他们在代码中的位置被移动到了最上面,这个过程就叫做提升。
先有声明后又赋值。
只有声明本身会被提升,而赋值或其他运行逻辑会留在原地。
函数声明会被提升,函数表达式却不会被提升。
即使是具名的函数表达式,名称标识符在赋值之前也无法在所在作用域中使用。
2.函数优先
函数声明和变量声明都会被提升。
函数首先会被提升,然后是变量。
出现在后面的函数声明会覆盖前面的。在同一个作用域中进行重复定义是非常糟糕的。
一个普通块内部的函数声明通常会被提升到所在作用域的顶部。
包括函数表达式在内的赋值操作并不会提升。