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

执行上下文 #4

Open
Lawguancong opened this issue Aug 22, 2021 · 0 comments
Open

执行上下文 #4

Lawguancong opened this issue Aug 22, 2021 · 0 comments

Comments

@Lawguancong
Copy link
Owner

Lawguancong commented Aug 22, 2021

执行上下文

全局、函数、eval
• 全局执行上下文 — 这是默认或者说基础的上下文,任何不在函数内部的代码都在全局上下文中。它会执行两件事:创建一个全局的 window 对象(浏览器的情况下),并且设置 this 的值等于这个全局对象。一个程序中只会有一个全局执行上下文。
• 函数执行上下文 — 每当一个函数被调用时, 都会为该函数创建一个新的上下文。每个函数都有它自己的执行上下文,不过是在函数被调用时创建的。函数上下文可以有任意多个。每当一个新的执行上下文被创建,它会按定义的顺序(将在后文讨论)执行一系列步骤
• Eval 函数执行上下文 — 执行在 eval 函数内部的代码也会有它属于自己的执行上下文,但由于 JavaScript 开发者并不经常使用 eval,所以在这里我不会讨论它

执行上下文栈(Execution context stack,ECS)

执行栈,也就是在其它编程语言中所说的“调用栈”,是一种拥有 LIFO(后进先出)数据结构的栈,被用来存储代码运行时创建的所有执行上下文。
当 JavaScript 引擎第一次遇到你的脚本时,它会创建一个全局的执行上下文并且压入当前执行栈。每当引擎遇到一个函数调用,它会为该函数创建一个新的执行上下文并压入栈的顶部。
引擎会执行那些执行上下文位于栈顶的函数。当该函数执行结束时,执行上下文从栈中弹出,控制流程到达当前栈中的下一个上下文。

准备阶段

词法分析、语法分析
this的绑定(this的指向,在大多数由运行时确定的)
作用域的绑定(全局作用域、块级作用域、函数作用域)
变量的绑定

执行阶段

思考

var为什么挂在全局
let const
变量提升
暂时性死锁
声明式(可以变量提前)
表达式 (不可以变量提前 -> undefined)

参考链接
https://juejin.cn/post/6844903682283143181
mqyqingfeng/Blog#4
kuitos/kuitos.github.io#18

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