1. 开辟一个堆内存「在堆内存中开辟一个空间」,有一个16进制的地址
2. 存储的内容
+ 函数体中的代码当做字符串先存储起来
+ 当做普通对象也会存一些键值对
3. 创建函数的时候,声明了其作用域[[Scope]]「创建函数所在的上下文」
4. 把堆内存的地址放置在栈中,供函数名「变量」去调用
1. 形成一个私有的执行上下文EC(...),然后进栈执行
+ AO(...):私有变量对象
2. 初始化作用域链
初始化THIS
初始化ARGUMENTS实参集合
形参赋值(形参是私有变量 & 当前私有上下文中声明的变量也是私有变量)
变量提升
3. 根据情况,决定当前形成的私有上下文是否会出栈释放「一般都会出栈释放」
函数再次执行,所有流程重新走一遍。「所以函数执行多次,每一次之间是没有直接关系的」
var x = [12, 23];
function fn(y) {
y[0] = 100;
y = [100];
y[1] = 200;
console.log(y);
}
fn(x);
console.log(x);

