许多开发人员经常混淆作用域(scope) 和 上下文(context),很多误解为它们是相同的概念。但事实并非如此。作用域(scope)我们上面已经讨论过了,而上下文(context)是用来指定代码某些特定部分中this的值。作用域(scope) 是指变量的可访问性,上下文(context)是指this在同一作用域内的值。我们也可以使用函数方法来改变上下文,将在稍后讨论。 在全局作用域(scope)中上下文中始终是Window对象。(取决于JavaScript 的宿主换环境,在浏览器中在全局作用域(scope)中上下文中始终是Window对象。在Node.js中在全局作用域(scope)中上下文中始终是Global对象)
1.1 概念
当函数执行时,会创建一个称为执行上下文的内部对象(可理解为作用域)。一个执行上下文定义了一个函数执行时的环境。
二、产生执行上下文的两个阶段
(1)在JavaScript解释器内部,每次调用执行上下文,分为两个阶段,①创建阶段 和 ②激活/代码执行阶段。
2.1 创建阶段
第一阶段是创建阶段,(当函数被调用,但未执行任何其内部代码之前)。在创建阶段主要做三件事:
(1)创建作用域链(Scope Chain)。
(2)创建变量对象(函数的形参、函数声明、变量声明)。
(3)求”this“的值。
网友评论