1)执行上下文概念:
当控制器转到ECMAScript可执行代码的时候,就会进入到一个执行上下文.
2)可执行代码包括:
全局代码:例如加载外部的js文件或者本地"<script></script>"标签内的代码。全局代码不包括任何function体内的代码。 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是全局代码的环境。
函数代码:任何一个函数体内的代码,但是需要注意的是,具体的函数体内的代码是不包括内部函数的代码。
Eval代码:eval内部的代码
3)执行上下文的创建过程
1>创建阶段(当函数被调用,但是未执行任何其内部代码之前)
建立作用域链 , 确定this的值, 建立变量, 函数, arguments对象, 参数
2>代码执行阶段
变量复制 , 函数引用, 执行其它代码
4)执行上下文栈
js引擎创建执行上下文栈来管理执行上下文
5)执行上下文栈过程:
当浏览器首次载入脚本的时候,它将默认进入全局执行上下文,所以初始化的时候首先就会向执行上下文栈压入一个全局执行上下文,并且只有当整个应用程序结束的时候,执行上下文栈才会被清空,所以执行上下文栈最底部永远有个全局执行上下文。每次调用一个函数将会创建一个新的执行上下文,而且新创建的一个执行上下文会被添加到执行栈的顶部.浏览器总会执行位于栈顶的执行上下文,一旦当前上下文的函数执行结束,它将被从栈顶弹出,并将控制权交给之前的执行上下文,这样,栈中的上下文就会被依次执行并且弹出栈,直到回到全局的上下文。