JS--之函数执行

66 阅读1分钟

函数创建

  1. 开辟堆内存(16进制地址)
  2. 把函数体内部的代码,当做‘字符串’存储到堆中(当然也有键值对,函数也是对象)
  3. 把地址存到栈中,供变量(函数名)调用。

=> 创建函数的时候,就声明了函数的‘作用域’,值是当前函数创建时所处的上下文。

注意:创建函数若不执行,毫无意义!只是开辟一块堆内存,存储一堆字符串而已。

函数执行

目的:把之前创建函数的时候,在函数中存储的代码字符串去执行

  • 形成一个全新的私有上下文
    • 有存储当前私有上下文中声明的私有变量的存储空间AO(Active Object他是VO的一种)
    • 把上下文进栈执行
  • 代码执行之前要做好多事情
    • 初始化作用域链
    • 初始化this指向
    • 初始化arguments
    • 形参赋值
    • 变量提升
  • 代码执行
  • 一般情况下,函数执行完成后,为了优化栈内存,会把形成的私有上下文,出栈释放掉'GC浏览器垃圾回收机制'