函数创建
- 开辟堆内存(16进制地址)
- 把函数体内部的代码,当做‘字符串’存储到堆中(当然也有键值对,函数也是对象)
- 把地址存到栈中,供变量(函数名)调用。
=> 创建函数的时候,就声明了函数的‘作用域’,值是当前函数创建时所处的上下文。
注意:创建函数若不执行,毫无意义!只是开辟一块堆内存,存储一堆字符串而已。
函数执行
目的:把之前创建函数的时候,在函数中存储的代码字符串去执行
- 形成一个全新的私有上下文
- 有存储当前私有上下文中声明的私有变量的存储空间AO(Active Object他是VO的一种)
- 把上下文进栈执行
- 代码执行之前要做好多事情
- 初始化作用域链
- 初始化this指向
- 初始化arguments
- 形参赋值
- 变量提升
- 代码执行
- 一般情况下,函数执行完成后,为了优化栈内存,会把形成的私有上下文,出栈释放掉'GC浏览器垃圾回收机制'