JS 执行上下文

变量对象(VO)执行顺序

1.函数参数(没有赋值时,为undefined)

2.函数声明(发生命名冲突,会覆盖之前的)

3.变量声明(初始值为undefined时,发生命名冲突,会被忽略)

function fun(x, y, z) {
  var func = function() {
    console.log('function');
  };
  var func;  //被忽略
  console.log(func);
}

fun();
//function
function fun(x, y, z) {
  var func = function() {
    console.log('function');
  };
  var func = 1;  //覆盖
  console.log(func);
}

fun();
//1

4.函数和变量都可以前置;

但是变量前置只是变量名前置,而变量值没有被前置是undefined;

所以,函数可以在声明之前调用,变量不能;

console.log(x); //function
//函数声明被前置

var x = 10;
console.log(x); //10
x = 20

function x() {};
console.log(x) //20
if (true) {
  var a = 1
} else {
  var b = true
}

console.log(a) //1
console.log(b) //undefined