函数的底层执行机制

206 阅读1分钟

变量说明:

AO(active object):活跃的变量对象(函数中的叫AO,全局的叫VO)存储变量的地方

1、函数声明定义步骤

(1)创建一个函数(堆内存)(函数的作用域在创建的时候就形成了;执行的时候形成的是上下文 )

+ 创建一个堆内存
+ 声明函数作用域(在哪个上下文创建的,作用域就是谁)下图可以证明

+ 存储东西
+ 把16进制地址放在栈中供变量引用

(2)声明一个变量fn(函数名其实也是变量名)

(3)关联

2、普通函数执行

(1)形成一个全新的私有上下文(EC(fn))==>进栈执行

(2)代码执行前处理的事情

+ 初始化作用域链
+ 声明this指向
+ 初始化arguments集合
+ 形参赋值
+ 变量提升

(3)代码执行

(4)出栈OR不出栈

3、练习题

var x = [12, 23];
function fn(y) {
    y[0] = 100;
    y = [100];
    y[1] = 200;
    console.log(y);
}
// fn(x);
console.log(x); 

分析