做类似的题,要严格按照以下四步走
世界上很多事都不能先上车后买票,一旦这样做了,就会后悔的,嗯,医院网挺快
预编译的四个阶段
1:创建ao对象
2:找形参和变量声明,作为ao对象的属性名,值是undefined
3:实参和形参相统一
4:找函数声明。会覆盖变量的声明
//源代码
function fn(a, c) {
console.log(a); //1
var a = 123;
console.log(a); //1
console.log(c); //1
function a() {}
if (false) {
var d = 678
}
console.log(d); //1
console.log(b); //1
var b = function () {}
console.log(b); //1
function c() {}
console.log(c); //100
}
fn(1, 2);
把源代码预解析
1:
ao:{
a:underfined 1 function a() {}
c:underfined 2 function c() {}
d:underfined
b:underfined
}
预解析后js的解释执行
function fn(a, c) {
console.log(a); //function a() {}
var a = 123;
console.log(a); //123
console.log(c); //1function c() {}
function a() {}
if (false) {
var d = 678//条件false,所以忽略
}
console.log(d); //underfined
console.log(b); //underfined
var b = function () {}
console.log(b); // function () {}
function c() {}
console.log(c); // function c() {}
}
fn(1, 2);