执行上下文和执行上下文栈

1)概念:

当控制器转到ECMAScript可执行代码的时候,就会进入到一个执行上下文.

1)可执行代码包括:

全局代码例如加载外部的js文件或者本地"<script></script>"标签内的代码。全局代码不包括任何function体内的代码。 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是全局代码的环境

函数代码任何一个函数体内的代码,但是需要注意的是,具体的函数体内的代码是不包括内部函数的代码

Eval代码eval内部的代码

3)过程:

当浏览器首次载入你的脚本,它将默认进入全局执行上下文。如果,你在你的全局代码中调用一个函数,你程序的时序将进入被调用的函数,并创建一个新的执行上下文,并将新创建的上下文压入执行栈的顶部。如果你调用当前函数内部的其他函数,相同的事情会在此上演。代码的执行流程进入内部函数,创建一个新的执行上下文并把它压入执行栈的顶部。浏览器总会执行位于栈顶的执行上下文,一旦当前上下文函数执行结束,它将被从栈顶弹出,并将上下文控制权交给当前的栈。这样,堆栈中的上下文就会被依次执行并且弹出堆栈,直到回到全局的上下文。

2)两个过程:
1>创建阶段【当函数被调用,但未执行任何其内部代码之前】

创建作用域链(Scope Chain),创建变量,函数和参数,”this“的值

2>执行阶段
初始化变量的值和函数的引用,解释/执行代码。

猜你喜欢

转载自blog.csdn.net/qq_41047322/article/details/81059509