预解析

156 阅读1分钟

js引擎运行js分为两步: 预解析、代码执行

  • 预解析:js引擎会把js里面所有得var还有function提升到当前作用域的最前面
  • 代码执行:按照代码书写的顺序从上往下执行

预解析分为变量预解析(变量提升)和函数预解析(函数提升)

  • 变量提升就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作
  • 函数提升就是把所有得函数声明提升到当前的作用域最前面,不提升函数操作

变量提升

console.log(num);
var num = 10;

//输出undefined

这里相当于

var num;
console.log(num);
num = 10;

在预解析的时候把变量声明提升到作用域最前面,而赋值没有提升,所以会输出undefined。

函数提升

在声明匿名函数时,在函数前调用

fun();
var  fun = function() {
   console.log(123);
}

这样调用会报错,因为这样就相当于

fun();
var  fun;
fun = function() {
   console.log(123);
}