首先判断下下面的打印结果
function fn(a, c) {
console.log(a); // function(){}
var a = 123;
console.log(a); //123
console.log(c); //function(){}
function a() {};
if (false) {
var d = 678
};
console.log(d); //undefined
console.log(b); //undefined
var b = function() {}
console.log(b); // function(){}
function c() {};
console.log(c) // fun
}
fn() // 调用
为什么会出现这样的结果:
预编译
作用域创建阶段, 预编译阶段
预编译的时候做了那些事情
js的变量对象 AO对象 供js引擎自己去访问
1.创建了Ao对象
2.找形参和变量的声明, 作为ao对象的属性名值是undefined
3.实参和形参相统一
4.函数声明 会覆盖变量声明
* Ao: {
* a: undefined 1 function a(){} // 函数声明会覆盖变量声明所以是函数
* c: undefined 2 function c(){}
* d: undefined // false 未执行内部的代码
* b: undefined //
* }