Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V8底层运行机制 #10

Open
dashengzi66 opened this issue Apr 22, 2021 · 3 comments
Open

V8底层运行机制 #10

dashengzi66 opened this issue Apr 22, 2021 · 3 comments

Comments

@dashengzi66
Copy link
Owner

JS底层存储机制:堆(Heap)、栈(Stack)内存

堆(Heap)、栈(Stack)
ECStack(Execution [ˌeksɪˈkjuːʃn] Context Stack)和 EC(Execution Context )
GO(Global Object)和 VO(Varibale Object)

@dashengzi66
Copy link
Owner Author

函数执行期间的整套运行机制

AO(Active Object)
SCOPE作用域 和 SCOPE-CHAIN作用域链

  • 形成一个私有的执行上下文(AO),然后进栈执行
  • 初始化作用域链
  • 初始化THIS
  • 初始化ARGUMENTS
  • 形参赋值
  • 变量提升
  • 代码执行
  • 根据情况决定是否出栈释放

@dashengzi66
Copy link
Owner Author

dashengzi66 commented Apr 22, 2021

var 变量 = 值 过程讲解

  • 创建值:原始值直接存储到栈内存中,对象值存储在堆内存中,开辟出来一块16进制空间存储对象的键值对,然后把地址放在栈内存中,供变量的引用
  • 声明变量:把声明的变量存储到当前上下文的变量对象中(var/function声明的变量放到GO,let/const声明的变量放到VO)
  • 赋值/定义:让变量和对应的值关联在一起(指针指向的过程)

@dashengzi66
Copy link
Owner Author

全局上下文的一些特点

  • 基于var/function声明的变量存放到GO中,相当于给window设置了对应的属性
  • 基于let/const/class声明的变量存放到VO中
  • 没有添加任何声明的变量,也相当于给window(GO)设置1个属性

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant