面试题答案
一键面试设计思路
- 迭代器概念:JavaScript 的迭代器允许我们按需产生值,而不是一次性生成所有值,这样可以避免一次性将大量数据加载到内存中。
- 避免频繁内存分配:通过迭代器逐个处理数组元素,而不是一次性处理整个数组,减少同时存在于内存中的数据量。同时,复用对象和变量,避免在循环内部频繁创建新的对象或变量。
- 减少垃圾回收压力:由于内存中不会同时存在大量中间结果,垃圾回收的频率和压力会相应降低。
关键代码片段
// 模拟复杂计算函数,这里以简单函数代替计算第n阶贝塞尔曲线坐标值
function complexCalculation(num) {
return num * num;
}
// 创建迭代器函数
function* arrayIterator(arr) {
for (let i = 0; i < arr.length; i++) {
yield arr[i];
}
}
// 处理数据
function processData() {
const largeArray = Array.from({ length: 100000 }, () => Math.floor(Math.random() * 100));
const iterator = arrayIterator(largeArray);
let result;
for (let value of iterator) {
// 复用 result 变量
result = complexCalculation(value);
// 这里可以对 result 进行进一步处理,例如存储到另一个数组或输出
console.log(result);
}
}
processData();
在上述代码中:
arrayIterator
函数是一个生成器函数,它返回一个迭代器,该迭代器可以按需逐个产生数组元素。processData
函数中,我们先创建了一个包含10万个随机整数的数组,然后获取数组的迭代器。- 在
for...of
循环中,我们逐个获取迭代器的值并进行复杂计算,通过复用result
变量减少了内存分配。这样就实现了性能优化,避免了频繁的内存分配和垃圾回收。