形参、实参
定义:形参就是函数声明时的变量 定义:实参就是调用该函数时传入的具体参数
function add(a,b){
return a + b
}
add(1,2)
/*
* a,b 就是形参
*调用函数add(1,2),1、2就是实参
*/
函数作用域的预编译
解题步骤:
- 创建AO对象 AO{}执行上下文
- 找变量声明和形参, 将变量名、形参名当作AO对象的属性名,值为undefined
- 将实参值和形参相统一
- 在函数体里面找函数声明 值赋予函数体
function fn(a,c){
console.log(a) // function (){}
var a = 111
console.log(a) // 111
console.log(c) // function(){}
function a (){} // 函数声明
if(false){
var d = 222
}
console.log(d) // undefined
console.log(b) // undefined
var b = function (){} // 函数表达式
console.log(b) // function (){}
function c (){}
console.log(c) // function (){}
}
fn(1,3)
- 预编译第一步:创建AO对象
AO{
}
- 预编译第2步:找形参和变量声明,将形参名和变量名作为AO对象的属性名
AO {
a:undefined
c:undefined
b:undefined
d:undefined
}
- 预编译第3步:将实参值和形参相统一
AO {
a:undefined 1
c:undefined 3
b:undefined
d:undefined
}
- 预编译第4步:在函数体里面找
函数声明(不是函数表达式),值赋予函数体
AO {
a:undefined 1 function a (){}
c:undefined 3 function c (){}
b:undefined
d:undefined
}
全局预编译
解题思路
- 创建GO对象
- 找变量声明,将变量名作为GO对象的属性名,值为undefined
- 找函数声明,值赋予函数体
console.log(test)
console.log(a)
function test(a){
console.log(c)
var a = b = 345
c = 9
if(false){
var c = 789
}
console.log(a)
console.log(c)
}
test(234)
console.log(b)
console.log(test)
var test = 123
var b = 456
解析
GO {
test:undefined function test(){}
a:undefined
c:undefined
b:undefined
}