1. 利用 函数关键字声明函数
因为有名字,所以也被称为命名函数 调用函数的代码既可以放到声明函数的前面,也可以放在声明函数的后面
这一个为 函数解析(函数提升)
会将函数提升的作用域的前面,会把函数提升到 调用函数前面 所以不管是放到前面还是后面没有影响
2. 利用函数表达式
函数表达式方式原理跟声明变量方式是一致的 函数调用的代码必须写到函数体后面
没有函数名 而是变量名
所以第二个预解析为 变量解析(变量提升)
函数从上往下执行 fun()调用找不到函数 报错
只提升不赋值 undefined