var之预解析
当你用var定义一个变量firstname时,直接用firstname时,你可以使用。
假如在var前面输出时
你会得到一个undefined,为何会得到一个undefined呢,因为JavaScript执行运行代码时,首先先通读一遍代码,之后才会生成代码。
总结:
变量声明提升,并不包含赋值
函数之预解析
赋值函数
正常可以使用,但如果在前面执行函数会报错
为何会报错呢,因为在前面执行函数,JavaScript只知道myFunc等于undefined,并没有任何值。
所以会报错他不是一个函数。
假设输出一个未在下方定义的函数,那么会出现不同错误
声明式函数
与变量声明提升差不多
但函数声明提升,包含赋值操作。
函数声明提升包含赋值的原因是为了让函数能够在声明之前就被调用,从而提供了一种方便的编程模型,使得函数的调用不受其在代码中位置的限制。
总结:
函数提升包括两个步骤:声明提升和赋值提升,函数以及赋值操作都会提升到作用域的顶部