提升
# 提升
任何声明在 某个作用域内的变量,都将附属于这个作用域。
# 先有鸡还是先有蛋
直觉上会认为 JavaScript 代码在执行时是由上到下一行一行执行的。但实际上这并不完全 正确
# 编译器再度来袭
引擎会 在解释 JavaScript 代码之前首先对其进行编译。编译阶段中的一部分工作就是找到所有的 声明,并用合适的作用域将它们关联起来
变量和函数在内的所有声明都会在任何代码被执行前首先 被处理。
变量和函数声明从它们在代码中出现的位置被“移动” 到了最上面。这个过程就叫作提升。
换句话说,先有蛋(声明)后有鸡(赋值)。
函数声明会被提升,但是函数表达式却不会被提升。
# 函数优先
函数声明和变量声明都会被提升。
函数会首先被提升,然后才是变量。
出现在后面的函数声明还是可以覆盖前面的。
# 小结
声明本身会被提升,而包括函数表达式的赋值在内的赋值操作并不会提升。