当你看到var a=2 时,
JavaScript将其看作两个声明,
var a; 定义声明在编译阶段进行
a=2 ; 赋值声明会被留在原地等待执行阶段
只有声明本身会被提升,而赋值或其他运行逻辑会被留在原地。如果提升改变了代码执行的顺序,会造成非常严重的破坏。
函数声明和变量声明都会被提升。但是 函数会先被提升,然后才是变量。
微妙的差异,赋值并没有被提升。
声明 foo 变量 并初始化 foo = undefined
foo 的赋值在 foo() 执行后 相当于 undefined()
() 必须是要 函数, undefined不是函数 所以报上面的错
反正提升这一块 ,盯着声明看就行,别的都不会被提升上去,
然后函数声明最优先,
随着版本更替,有些写法也会被禁用。
所以,
不要在同一个作用域里进行重复定义
所有的声明(变量和函数)对会被“移动”到各自作用域的最顶端,这个过程被称为提升
声明本身会被提升,而包括函数表达式的赋值在内的赋值操作并不会提升
要注意避免重复声明,特别是当普通的var声明和函数声明混在一起的时候,否则会引起很多危险的问题!