理解js作用域和闭包(2)—— 函数预编译

58 阅读1分钟

函数预编译流程

  1. 在函数被调用时为当前函数产生A0对象

  2. 查找形参和变量声明作为A0对象的属性名值为undefined

  3. 使用实参的值改变形参的值

  4. 查找函数声明作为A0对象的属性名值为function

示例

image.png

//1生产Window对象
    // GO:1.查找变量的声明
    // 2.查找数的声明 将用数a作为window刘象的属性名,值function
    //全同预编译结束
    // 执行代码
//执17行,调用下数a,生产响数a的A0对象
// AO:1.查找形参test,变量i作为A0对象的属性名,值undefined
//    2.实参1赋值给test,test:1
//    3.查找局部函数b,b作为A0对象的腐性名,值为function
//函数的预编译结束
//执行