全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页

JS高级语法与特性专题测试

20 题 45 分钟 难度:

考察知识点

  • 原型链:原型链查找机制、__proto__与prototype关系、属性遮蔽效应、原型链顶端结构
  • ES Modules:静态结构特性、循环依赖处理、export default与命名导出区别、导入导出语法
  • 高阶函数:高阶函数定义、函数柯里化、函数组合、map/filter/reduce实现原理
  • 事件循环:微任务与宏任务执行顺序、async/await行为、setTimeout(0)实际执行时机、Node.js与浏览器差异
  • Proxy/Reflect:拦截操作类型、receiver参数作用、可撤销代理、私有属性实现
  • 生成器与迭代器:yield行为、next参数传递、yield*委托、迭代器协议实现
  • 函数式编程:纯函数特性、副作用概念、引用透明
1
单选题

以下代码的输出结果是什么?

JavaScript
function Foo() {}
Foo.prototype.a = 1;

const foo = new Foo();
Foo.prototype = { b: 2 };

console.log(foo.a, foo.b);
A

1 undefined

B

undefined 2

C

1 2

D

undefined undefined

2
单选题

以下代码的输出结果是什么?

JavaScript
const obj = { a: 1 };
console.log(obj.__proto__ === Object.prototype);
console.log(Object.prototype.__proto__);
A

true null

B

true undefined

C

false null

D

true Object.prototype

3
判断题

当对象自身属性和原型链上存在同名属性时,访问该属性会返回原型链上的值。

A

B

4
判断题

所有对象都有 prototype 属性,所有函数都有 proto 属性。

A

B

5
单选题

关于 ES Modules 的特性,以下说法正确的是?

A

import语句可以放在代码的任意位置,与变量声明类似

B

ES Module的导入是静态分析,可以在运行时动态修改

C

被导入的模块会被提升到模块顶部,在代码执行前完成加载

D

import导入的变量可以在当前模块中重新赋值

6
单选题

关于 ES Modules 处理循环依赖的方式,以下描述正确的是?

A

循环依赖会导致模块加载失败,抛出错误

B

ES Module会在循环依赖时返回已导出的部分绑定,未导出部分为undefined

C

循环依赖时,所有导入的变量都会被设置为undefined

D

ES Module不支持循环依赖,需要手动避免

7
判断题

ES Modules 在代码执行前就完成模块的加载和解析,而 CommonJS 是在代码运行时按需加载模块。

A

B

8
单选题

以下哪个选项准确描述了高阶函数的定义?

A

返回值是数字类型的函数

B

接收函数作为参数或返回函数的函数

C

只能处理数组操作的函数

D

必须使用箭头函数语法定义的函数

9
单选题

以下代码实现了函数柯里化,输出结果是什么?

JavaScript
function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    }
    return function(...moreArgs) {
      return curried.apply(this, args.concat(moreArgs));
    };
  };
}

const sum = (a, b, c) => a + b + c;
const curriedSum = curry(sum);

console.log(curriedSum(1)(2)(3));
console.log(curriedSum(1, 2)(3));
A

6 6

B

[1, 2, 3] [1, 2, 3]

C

6 undefined

D

TypeError

10
单选题

以下函数组合工具的输出结果是什么?

JavaScript
const compose = (...fns) => x => fns.reduceRight((acc, fn) => fn(acc), x);

const add1 = x => x + 1;
const double = x => x * 2;
const square = x => x * x;

const composed = compose(square, double, add1);
console.log(composed(3));
A

64

B

16

C

49

D

8

11
判断题

传递给高阶函数的回调函数只能是无状态的纯函数,不能有副作用。

A

B

12
单选题

以下代码的输出结果是什么?

JavaScript
console.log('1');

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

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

console.log('5');

async function asyncFunc() {
  console.log('6');
  await Promise.resolve();
  console.log('7');
}
asyncFunc();

queueMicrotask(() => console.log('8'));
A

1 5 6 3 4 7 8 2

B

1 5 6 3 7 4 8 2

C

1 5 3 4 6 7 8 2

D

1 5 6 3 7 8 4 2

13
多选题

以下哪些选项会产生微任务(Microtask)?

A

setTimeout(() => {}, 0)

B

Promise.resolve().then(() => {})

C

queueMicrotask(() => {})

D

MutationObserver.observe()

E

requestAnimationFrame(() => {})

14
单选题

以下代码的输出结果是什么?

JavaScript
async function test() {
  console.log('A');
  await null;
  console.log('B');
}

test();
console.log('C');

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

A C B D

B

A C D B

C

C A B D

D

C A D B

15
判断题

setTimeout(fn, 0) 会立即执行回调函数,因为它设置了0毫秒延迟。

A

B

16
单选题

以下代码的输出结果是什么?

JavaScript
const handler = {
  get(target, prop, receiver) {
    console.log(`get: ${prop}`);
    return Reflect.get(target, prop, receiver);
  },
  set(target, prop, value, receiver) {
    console.log(`set: ${prop}=${value}`);
    return Reflect.set(target, prop, value, receiver);
  }
};

const obj = { a: 1, b: 2 };
const proxy = new Proxy(obj, handler);

proxy.a++;
console.log(proxy.a);
A

get: a; set: a=2; get: a; 2

B

get: a; set: a=2; 2

C

set: a=2; get: a; 2

D

get: a; get: a; set: a=2; 2

17
多选题

以下哪些操作会被Proxy的handler拦截?

A

proxy.name(属性读取)

B

proxy.name = 'value'(属性设置)

C

Object.keys(proxy)

D

proxy instanceof SomeClass

E

delete proxy.name

18
单选题

以下代码的输出结果是什么?

JavaScript
function* generator() {
  yield 1;
  yield 2;
  return 3;
}

const gen = generator();
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
A

{value: 1, done: false} {value: 2, done: false} {value: 3, done: false}

B

{value: 1, done: false} {value: 2, done: false} {value: 3, done: true}

C

{value: 1, done: false} {value: 2, done: true} {value: undefined, done: true}

D

{value: 1, done: true} {value: 2, done: true} {value: 3, done: true}

19
单选题

以下代码的输出结果是什么?

JavaScript
function* generator() {
  const a = yield 1;
  const b = yield a * 2;
  yield b * 3;
}

const gen = generator();
console.log(gen.next());
console.log(gen.next(10));
console.log(gen.next(20));
A

{value: 1} {value: 20} {value: 60}

B

{value: 1} {value: 20} {value: 40}

C

{value: undefined} {value: 20} {value: 60}

D

{value: 1} {value: 10} {value: 30}

20
单选题

以下哪个选项准确描述了纯函数的特性?

A

纯函数必须返回数值类型的结果

B

纯函数不依赖外部状态,相同输入总是产生相同输出,且无副作用

C

纯函数不能使用任何参数

D

纯函数必须使用箭头函数语法

← 上一个试卷 JS高级技能认证

📝 发现内容有误?点击此处直接编辑

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库