JS高级语法与特性专题测试
考察知识点
- 原型链:原型链查找机制、__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);
2
单选题
以下代码的输出结果是什么?
JavaScript
const obj = { a: 1 };
console.log(obj.__proto__ === Object.prototype);
console.log(Object.prototype.__proto__);
3
判断题
当对象自身属性和原型链上存在同名属性时,访问该属性会返回原型链上的值。
4
判断题
所有对象都有 prototype 属性,所有函数都有 proto 属性。
5
单选题
关于 ES Modules 的特性,以下说法正确的是?
6
单选题
关于 ES Modules 处理循环依赖的方式,以下描述正确的是?
7
判断题
ES Modules 在代码执行前就完成模块的加载和解析,而 CommonJS 是在代码运行时按需加载模块。
8
单选题
以下哪个选项准确描述了高阶函数的定义?
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));
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));
11
判断题
传递给高阶函数的回调函数只能是无状态的纯函数,不能有副作用。
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'));
13
多选题
以下哪些选项会产生微任务(Microtask)?
14
单选题
以下代码的输出结果是什么?
JavaScript
async function test() {
console.log('A');
await null;
console.log('B');
}
test();
console.log('C');
Promise.resolve().then(() => console.log('D'));
15
判断题
setTimeout(fn, 0) 会立即执行回调函数,因为它设置了0毫秒延迟。
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);
17
多选题
以下哪些操作会被Proxy的handler拦截?
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());
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));
20
单选题
以下哪个选项准确描述了纯函数的特性?
📝 发现内容有误?点击此处直接编辑
想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析
长按或扫描二维码,立即体验