js编程-函数底层处理机制

145 阅读1分钟

1、创建函数在堆内存中单独开辟一块空间(16进制地址),存储的是函数体中的“代码字符串”;

2、创建函数的时候,就申明了函数执行的作用域(scope),即函数执行的上下文;

3、在栈内存中,将变量名和16进制地址关联;

4、函数执行的目的:

1)把创建函数存放在堆内存的字符串变成代码执行;

2)会形成一个全新的私有的执行上下文;

3) 在私有上下文中,也有存放自己变量的对象,此对象被称为AO (Active Object) 是VO的一种分支,这里的变量都是当前上下文中的私有变量(当前上下文中声明的变量、形参变量)

4)进栈执行;

5)进栈执行处理的事情:

(1) 初始化作用域链(scope-chain)<当前的执行上下文,上级上下文(创建函数时形成的上下文)>当前函数的上级上下文是创建函数所在的上下文作用域链

后期函数内代码执行,遇到一个函数变量,首先判断是否为自己上下文中的私有变量,如果是私有变量,则当前变量的操作与外界环境中的变量互不干扰;如果不是自己的私有变量,则会沿着作用域链,查找是否为上级上下文中私有变量,直到找到EC(G)全局上下文为止

(2)初始化this;

(3)初始化arguments;

(4)形参赋值:形参都是私有变量(放到AO中)没有形参,默认传递undefined

(5)变量提升

(6)代码执行

  1. 函数的作用域链取决于它创建时的作用域,而不是执行时的作用域;