You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数内闭包应用:计算器实现中计算结果返回问题

用闭包实现双数值计算器并返回结果的解决方案

嘿,看起来你已经迈出了用闭包做计算器的关键一步啦!咱们直接来搞定返回结果的问题——其实核心就是在你的计算逻辑里用return抛出结果就行,结合闭包的特性,咱们可以把逻辑封装得更优雅。

基础实现方案(闭包封装运算符逻辑)

咱们可以写一个闭包函数,它接受你想要的运算符作为参数,然后返回一个能接收两个数值并返回计算结果的函数。这样既利用了闭包保留上下文的特性,又能清晰地返回运算结果:

function createCalculator(operator) {
  // 返回的匿名函数就是闭包,它能访问外部的operator变量
  return function(num1, num2) {
    switch(operator) {
      case '+':
        return num1 + num2; // 直接返回加法结果
      case '*':
        return num1 * num2; // 返回乘法结果
      case '-':
        return num1 - num2;
      case '/':
        // 别忘了处理除以0的异常情况
        if (num2 === 0) {
          return '错误:不能除以0';
        }
        return num1 / num2;
      default:
        throw new Error(`不支持的运算符:${operator}`);
    }
  };
}

// 用法示例
const addCalculator = createCalculator('+');
console.log(addCalculator(5, 3)); // 输出 8

const multiplyCalculator = createCalculator('*');
console.log(multiplyCalculator(4, 6)); // 输出 24

另一种写法:拆分运算函数(更易维护)

如果你已经写好了单独的加法、乘法等函数,也可以用闭包来分发这些函数,同样能返回结果:

// 先定义各个运算的纯函数
const add = (a, b) => a + b;
const multiply = (a, b) => a * b;
const subtract = (a, b) => a - b;
const divide = (a, b) => b !== 0 ? a / b : '错误:除数不能为0';

function createCalculator(operator) {
  // 根据运算符返回对应的计算函数,调用时自然能拿到返回值
  switch(operator) {
    case '+':
      return add;
    case '*':
      return multiply;
    case '-':
      return subtract;
    case '/':
      return divide;
    default:
      throw new Error('请输入合法的运算符:+、-、*、/');
  }
}

// 使用
const divideCalculator = createCalculator('/');
console.log(divideCalculator(10, 2)); // 输出 5

关键要点

  • 不管哪种写法,核心都是在计算逻辑里用return返回运算结果——当你调用生成的计算器函数时,就能直接拿到这个结果。
  • 闭包的作用是帮你“记住”用户选择的运算符,这样后续调用计算函数时不用重复传入运算符,保持代码简洁。
  • 记得加上异常处理(比如除以0、非法运算符),让计算器更健壮。

如果还有其他需求(比如支持连续运算、更多数值输入),随时可以再细化问题哦~

内容的提问来源于stack exchange,提问作者Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:26:44