-
Notifications
You must be signed in to change notification settings - Fork 1
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
JS 执行上下文 #62
Comments
一起看看 JavaScript 程序内部是如何执行的。
如果你想成为一个合格的 JavaScript 开发者,你必须知道它的内部是如何执行的。掌握 JavaScript 执行上下文和执行栈对理解变量提升、作用域和闭包非常重要。 理解执行上下文和执行栈将使你成为一个更加优秀的 JavaScript 开发者。 执行上下文是什么?执行上下文是一个 JavaScript 代码运行的环境。任何 JavaScript 代码执行的时候都是处于一个执行上下文中。 执行上下文的类型JavaScript 中一共有三种执行上下文。
执行栈执行栈(执行上下文栈),在其他编程语言中也叫调用栈,是一个后进先出的结构。它用来存储代码执行过程中创建的所有执行上下文。 当 JavaScript 引擎执行你的代码时,它会创建一个全局执行上下文并且将它推入当前的执行栈。当执行碰到函数调用的时候,它会为这个函数创建执行上下文并把这个执行上下文推入执行栈顶部。 引擎执行处于栈顶的上下文对应的函数。当函数执行完毕,它的上下文就会从栈顶弹出,引擎接着继续执行新处于顶部的上下文对应的函数。 看看下面的例子: let a = 'Hello World!';
function first() {
console.log('Inside first function');
second();
console.log('Again inside first function');
}
function second() {
console.log('Inside second function');
}
first();
console.log('Inside Global Execution Context'); 上面代码在浏览器中执行时,JavaScript 引擎会先创建一个全局执行上下文并把它推出执行栈中。碰到 当 当 执行上下文是如何创建的从上面的过程,我们已经了解了 JavaScript 引擎是如何管理执行上下文的,接下来我们看看引擎是如何创建执行上下文的。 执行上下文会经历两个阶段:1 创建阶段;2 执行阶段。 创建阶段执行上下文在创建阶段就会被创建。创建阶段做下面两件事:
所以从概念上说,执行上下文可以用下面的方式表示: ExecutionContext = {
LexicalEnvironment = <ref. to LexicalEnvironment in memory>,
VariableEnvironment = <ref. to VariableEnvironment in memory>,
} 词法环境(Lexical Environment)ES6 官方文档是这样定义词法环境的
简单来说,词法环境是一种表示标识符和变量的映射关系的环境。在词法环境中,标识符指向变量或者函数,变量是指对象(包括函数对象和数组对象)或者原始值。 举个例子,看看下面的代码 var a = 20;
var b = 40;
function foo() {
console.log('bar');
} 上面代码的词法环境如下 lexicalEnvironment = {
a: 20,
b: 40,
foo: <ref. to foo function>
} 每个词法环境由三个部分组成:
环境记录(Environment Record)Environment Record 是在词法环境中存储变量和函数的地方。 Environment Record 有下面两种:
上面是原文,简单解释下:
注意:对于函数,环境记录也包括一个 function foo(a, b) {
var c = a + b;
}
foo(2, 3);
// argument object
Arguments: {0: 2, 1: 3, length: 2},
|
形成文章
理解 JavaScript 中的执行上下文
ref #2
The text was updated successfully, but these errors were encountered: