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

为何在返回函数中n++与n+1的表现存在差异?

LeetCode计数器问题:n++与n+1的差异解析

问题背景

给定一个整数n,返回一个计数器函数。该函数初始返回n,后续每次调用时返回比前一次值大1的结果(n, n + 1, n + 2等)。

首次尝试代码(无效)

const createCounter = function(n) {
    return function() {
        return n + 1;
    };
};

const counter = createCounter(10)
// 输出结果
console.log(counter()) // 11
console.log(counter()) // 11
console.log(counter()) // 11

这段代码每次调用都返回11,无法实现递增需求。

修正后的代码(有效)

const createCounter = function(n) {
    return function() {
        return n++;
    };
};

const counter = createCounter(10)
// 输出结果
console.log(counter()) // 10
console.log(counter()) // 11
console.log(counter()) // 12

修改后的代码成功通过测试,实现了每次调用返回递增数值的效果。

核心差异解析

两者看似都和数值递增相关,却一个有效一个无效,关键在于是否修改闭包中变量n的实际存储值:

1. n + 1:仅做运算,不修改原变量

n + 1是单纯的表达式计算,它只会基于当前n的值算出加1的结果,但不会改变原变量n的存储值。闭包中的n始终是初始传入的10,所以每次调用返回的都是10 + 1 = 11,自然无法实现递增。

2. n++:先返回原值,再更新变量

n++是后置自增运算符,属于赋值操作:

  • 第一步:返回当前n的原始值(第一次调用时是10);
  • 第二步:将n的值加1并重新赋值给原变量(第一次调用后n变为11);
    每次调用都会更新闭包中n的状态,后续调用就能基于更新后的n值返回递增结果。

如果想用n + 1实现同样效果,需要主动修改原变量,比如写成:

const createCounter = function(n) {
    return function() {
        n = n + 1;
        return n;
        // 或者直接写 return ++n;(前置自增,先加1再返回)
    };
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:05:24