MST

星途 面试题库

面试题:JavaScript 函数式编程中纯函数的特性及应用

请阐述 JavaScript 函数式编程中纯函数的两个主要特性,并举例说明在实际项目里纯函数可以在哪些场景下应用,比如数据处理方面。
33.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

纯函数的两个主要特性

  1. 相同输入,相同输出:无论何时调用,只要传入的参数相同,纯函数总会返回相同的结果。它不依赖于外部状态,也不会被外部状态所影响。例如:
function add(a, b) {
    return a + b;
}
console.log(add(2, 3)); // 5
console.log(add(2, 3)); // 5,每次调用,只要参数相同,结果就相同
  1. 无副作用:纯函数不会对外部环境产生可观察的变化,如修改全局变量、发起网络请求、操作 DOM 等。例如,以下函数就有副作用,因为它修改了全局变量:
let count = 0;
function increment() {
    count++;
    return count;
}

而纯函数版本则不会:

function increment(count) {
    return count + 1;
}
let initialCount = 0;
let newCount = increment(initialCount);
// initialCount 未被修改,新值通过返回值获取

实际项目中的应用场景

  1. 数据处理:在数据映射、过滤和归约等操作中非常有用。例如,使用 map 方法处理数组数据:
const numbers = [1, 2, 3, 4];
const squaredNumbers = numbers.map(num => num * num);
// squaredNumbers: [1, 4, 9, 16]
// map 方法的回调函数是纯函数,对每个元素执行相同操作,不影响外部状态
  1. 数据缓存:由于纯函数相同输入总是返回相同输出,可以方便地进行缓存。比如使用 lodash 库中的 memoize 方法来缓存纯函数的结果:
import _ from 'lodash';
function expensiveCalculation(a, b) {
    // 假设这里有复杂的计算逻辑
    return a + b;
}
const memoizedCalculation = _.memoize(expensiveCalculation);
console.log(memoizedCalculation(2, 3)); // 第一次调用,执行计算
console.log(memoizedCalculation(2, 3)); // 第二次调用,直接返回缓存结果,提高性能
  1. 测试:纯函数易于测试,因为不需要考虑外部状态的影响。例如:
function multiply(a, b) {
    return a * b;
}
// 测试时只需要关注输入和输出
import { expect } from 'chai';
describe('multiply function', () => {
    it('should multiply two numbers correctly', () => {
        expect(multiply(2, 3)).to.equal(6);
    });
});