前端 JavaScript 进阶面试题, 什么是 JavaScript 的执行上下文?
前端 JavaScript 进阶面试题, 什么是 JavaScript 的执行上下文?
QA
Step 1
Q:: 什么是 JavaScript 的执行上下文?
A:: JavaScript 的执行上下文是代码在运行时的环境。每个执行上下文都有三个重要的属性:变量对象(Variable Object)、作用域链(Scope Chain)和 this 值。执行上下文分为三种类型:全局执行上下文、函数执行上下文和 eval 执行上下文。
Step 2
Q:: JavaScript 的执行上下文有哪些类型?
A:: 执行上下文有三种类型:1. 全局执行上下文:这是默认或基础的上下文,任何不在函数内部的代码都在全局执行上下文中。2. 函数执行上下文:每次调用函数时,都会为该函数创建一个新的执行上下文。3.
Eval 执行上下文:运行在 eval 函数中的代码也会有它自己的执行上下文。
Step 3
Q:: JavaScript 执行上下文的生命周期?
A:: 执行上下文的生命周期包括创建阶段和执行阶段。在创建阶段,执行上下文会创建变量对象、建立作用域链并确定 this 的值。在执行阶段,代码被解释执行,变量赋值、函数引用等操作被处理。
Step 4
Q:: 什么是作用域链?
A:: 作用域链是由多个执行上下文的变量对象组成的链表,用于解析变量。当执行上下文被创建时,会创建一个作用域链以便于查找变量和函数。当前执行上下文的变量对象总是作用域链的第一个变量对象,外层上下文的变量对象依次排列。
Step 5
Q:: this 的值在执行上下文中是如何确定的?
A:: 在全局执行上下文中,this 指向全局对象(浏览器中是 window 对象)。在函数执行上下文中,this 的值取决于函数的调用方式:1. 作为对象的方法调用,this 指向调用该方法的对象。2. 作为构造函数调用,this 指向新创建的实例对象。3. 使用 call、apply 或 bind 显式指定 this。4.
普通函数调用,this 在严格模式下为 undefined,在非严格模式下指向全局对象。