预编译发生在函数执行的前一刻
1.创建AO对象(Activetion Object)(执行期上下文)
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined;
3.将实参和形参统一
4.在函数体里面找函数声明,值赋予函数体
ps:未经声明的就赋值,此变量就为全局对象所有。
function fn(a){ // a:1
console.log(a); //fn
var a = 123; // a:undefined
console.log(a); //123
function a(){} // a: function a(){}
console.log(a); //123
var b =function(){} // b : undefined;
console.log(b); //fn
function d(){} //d : function d(){}
}
fn(1);
function test(a,b) {
console.log(a); //1
c = 0;
var c ;
a = 3 ;
b = 2 ;
console.log(b); //fn
function b(){ }
function d(){ }
console.log(b); //fn
}
test(1);
function test(a,b){
console.log(a); //fn
console.log(b); //undefined
var b =234;
console.log(b); //234
a=123;
console.log(a); //123
function a(){}
var a ;
b=234;
var b = function(){}
console.log(a); //123
console.log(b); //fn
}
test(1);
global = 100;
function fn(){
console.log(global);
global=200;
console.log(global);
var global = 300;
}
fn();
var global;
function bar(){
return foo;
foo=10;
function foo(){}
var foo =11;
}
console.log(bar());
console.log(bar());
function bar(){;
foo=10;
function foo(){}
var foo=11;
return foo;
};
function foo(){
bar.apply(null,arguments);
}
function bar(){
console.log(arguments);
}
foo(1,2,3,4,5);