1、执行上下文的概念
为了表示不同的运行环境,JavaScript中有一个执行上下文(Execution context,EC)的概念。代码运行是在一定的环境之中运行的,这个运行环境我们就成为执行环境,也就是执行上下文。
javascript运行的代码环境有三种:
全局代码:代码默认运行的环境,最先会进入到全局环境中
函数代码:在函数的局部环境中运行的代码
Eval代码:在Eval()函数中运行的代码
全局上下文是最外围的一个执行环境,web浏览器中被认为是window对象。在初始化代码时会先进入全局上下文中,每当一个函数被调用时就会为该函数创建一个执行上下文,每个函数都有自己的执行上下文。为了便于理解看下图
上图中,一共用4个执行上下文。紫色的代表全局的上下文;绿色代表person函数内的上下文;蓝色以及橙色代表person函数内的另外两个函数的上下文。
注意:不管什么情况下,只存在一个全局的上下文,该上下文能被任何其它的上下文所访问到。也就是说,我们可以在person的上下文中访问到全局上下文中的sayHello变量,当然在函数firstName或者lastName中同样可以访问到该变量。至于函数上下文的个数是没有任何限制的,每到调用执行一个函数时