全部学科
Python全栈
python
NodeJS全栈
nodejs

JS引擎与运行时原理专题测试

20 题 60 分钟 难度:★★★

考察知识点

知识模块题数核心考点
内存管理与优化4题V8内存分代、垃圾回收算法、内存泄漏检测
编译与解释执行2题字节码编译、JIT编译机制
JIT编译优化2题内联缓存、热点代码优化、去优化机制
JavaScript引擎架构2题引擎组件、解析器与解释器
V8引擎内部机制2题Ignition解释器、TurboFan优化编译器
执行上下文与调用栈2题执行上下文创建、调用栈追踪
跨平台运行时差异1题浏览器与Node.js运行时差异
this绑定规则1题this指向、绑定规则
事件循环与宏任务/微任务3题事件循环机制、任务队列、执行顺序
垃圾回收机制1题GC算法、分代回收
💡 参考答案在文末
判断题
1

在JavaScript中,将变量赋值为null可以立即触发垃圾回收器回收该变量引用的对象。

A

B

单选题
2

V8引擎执行JavaScript代码时,字节码由哪个组件生成和执行?

A

TurboFan

B

Ignition

C

Parser

D

GC

3

V8引擎将堆内存分为新生代(New Space)和老生代(Old Space),以下关于这种分代设计的描述,哪项是正确的?

A

新生代使用标记-清除算法,老生代使用Scavenge算法

B

新生代存放存活时间短的对象,老生代存放存活时间长的对象

C

新生代和老生代的内存空间大小相同

D

对象一旦创建就无法从新生代晋升到老生代

4

在标记-清除垃圾回收算法中,"根对象"包括哪些?

A

只有全局对象

B

全局对象、当前执行栈中的变量、全局环境中的变量

C

所有对象都是根对象

D

只有被引用的对象

5

async函数中的await表达式后面的代码何时执行?

A

立即执行,与同步代码相同

B

在await后的Promise resolve时,作为微任务执行

C

在await后的Promise resolve时,作为宏任务执行

D

在下一个事件循环周期执行

6

以下代码执行后,输出顺序是什么?

JavaScript
console.log('1');

setTimeout(() => console.log('2'), 0);

Promise.resolve().then(() => console.log('3'));

console.log('4');
A

1, 4, 3, 2

B

1, 4, 2, 3

C

1, 2, 4, 3

D

1, 3, 4, 2

7

函数内联(Function Inlining)是JIT编译的重要优化手段,以下关于内联的说法正确的是?

A

内联会减少函数调用开销,但可能增加代码体积

B

所有函数都应该被内联以获得最佳性能

C

内联只能由开发者手动完成,编译器不会自动内联

D

递归函数最适合内联优化

8

当函数A调用函数B,函数B调用函数C时,调用栈的状态是什么?

A

从栈底到栈顶:全局 → A → B → C

B

从栈底到栈顶:C → B → A → 全局

C

只有当前执行的函数C在栈中

D

只有全局上下文在栈中

9

JavaScript引擎与浏览器的关系是什么?

A

JavaScript引擎内置了DOM渲染功能

B

JavaScript引擎独立于浏览器,浏览器通过API调用引擎

C

JavaScript引擎只负责网络请求处理

D

不同浏览器必须使用相同的JavaScript引擎

多选题
10

V8引擎的TurboFan优化编译器会进行多种优化,以下哪些是TurboFan可能执行的优化策略?

A

内联(Inlining)小函数以减少调用开销

B

逃逸分析(Escape Analysis)优化对象分配

C

循环不变量外提(Loop Invariant Code Motion)

D

基于类型反馈的去优化(Deoptimization)

E

将所有函数强制编译为机器码

F

死代码消除(Dead Code Elimination)

11

JavaScript执行上下文包含哪些组成部分?

A

变量环境(Variable Environment)

B

词法环境(Lexical Environment)

C

this绑定(This Binding)

D

外部环境引用(Outer Environment Reference)

E

作用域链(Scope Chain)

F

参数对象(Arguments Object)

12

一个完整的JavaScript引擎通常包含以下哪些组件?

A

解析器(Parser)

B

解释器(Interpreter)

C

JIT编译器(JIT Compiler)

D

垃圾回收器(Garbage Collector)

E

DOM渲染引擎

F

调用栈(Call Stack)

13

以下哪些是浏览器与Node.js运行环境的主要差异?

A

全局对象:浏览器是window,Node.js是global

B

模块系统:浏览器使用ES Modules,Node.js支持CommonJS和ES Modules

C

DOM API:浏览器有DOM,Node.js没有

D

文件系统:Node.js可以直接访问,浏览器受限

E

事件循环机制完全不同

F

异步API:浏览器有fetch,Node.js有http模块

14

JavaScript中this的绑定遵循四种规则,以下关于绑定规则的说法正确的是?

A

默认绑定:独立调用函数时,this指向全局对象(严格模式下为undefined)

B

隐式绑定:通过对象调用函数时,this指向该对象

C

显式绑定:使用call/apply/bind时,this指向指定的对象

D

new绑定:构造函数中的this指向新创建的实例对象

E

箭头函数遵循上述四种绑定规则

F

绑定规则的优先级:new绑定 > 显式绑定 > 隐式绑定 > 默认绑定

15

关于JavaScript事件循环的执行顺序,以下哪些说法是正确的?

A

每个事件循环周期开始时,先执行同步代码

B

同步代码执行完毕后,先清空微任务队列

C

微任务清空后,从宏任务队列取出一个任务执行

D

每个宏任务执行完毕后,都会清空微任务队列

E

微任务可以在当前宏任务执行过程中添加新的微任务,并在当前周期清空

F

宏任务和微任务的执行顺序由添加时间决定

16

在V8引擎中,以下哪些措施可以有效预防和检测内存泄漏?

A

使用WeakMap和WeakSet存储对象引用

B

在组件卸载时清除定时器和事件监听器

C

使用Chrome DevTools的Memory面板进行堆快照对比

D

将所有变量声明为全局变量以便于访问

E

避免创建闭包来防止内存占用

F

使用performance.memory API监控内存使用趋势

17

关于JavaScript的编译与解释执行,以下哪些说法是正确的?

A

JavaScript是纯解释型语言,代码不会经过任何编译过程

B

V8引擎在执行前会先将JavaScript编译为字节码

C

JIT编译器会将热点代码编译为机器码以提高执行效率

D

首次执行时代码以字节码或解释方式运行,性能较低

E

编译后的机器码会永久缓存,不会重新编译

F

优化编译器会基于类型反馈信息进行激进优化

填空题
18

Node.js事件循环分为多个阶段,其中____________阶段执行setTimeout/setInterval回调,____________阶段执行I/O回调,____________阶段执行setImmediate回调。

19

现代JavaScript引擎(如V8)主要使用____________算法进行垃圾回收,该算法通过从____________开始遍历,标记所有可达对象,未被标记的对象将被回收。

20

V8引擎为了减少垃圾回收造成的全停顿,引入了____________技术,将标记工作分成多个小步骤穿插执行;还引入了____________技术,利用辅助线程在主线程执行JavaScript时并行进行GC工作。

参考答案
1.错误 2.B 3.B 4.B 5.B 6.A 7.A 8.A 9.B 10.A;B;C;F 11.A;B;C;D 12.A;B;C;D;F 13.A;B;C;D;F 14.A;B;C;D;F 15.A;B;C;D;E 16.A;B;C;F 17.B;C;D;F 18.timers;poll;check 19.标记-清除;根对象 20.增量标记;并发回收
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 JS异步进阶与并发控制测试
下一套试卷 → JS模块化与工程化基础专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码