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

JavaScript闭包代码调用打印undefined而非预期值1的原因

function outside() {
    let out = 0;
    function inside() {
        out += 1;
    }
    return inside;
}

let ref = outside();
console.log(ref());

原因说明

输出undefined和闭包本身没有关系,问题出在inside函数的定义上:
JavaScript的函数如果没有通过return关键字显式指定返回值,执行完成后默认会返回undefined。

你写的inside函数仅完成了对闭包变量out的自增操作,没有写任何返回逻辑——哪怕闭包确实正常生效、out确实已经从0自增到了1,这个值也只存在于闭包作用域内部,没有被函数返回,所以外层调用ref()时拿到的只能是默认的undefined。

想要拿到预期的自增结果,只需要在inside函数里加上返回值即可:

function outside() {
    let out = 0;
    function inside() {
        out += 1;
        return out; // 把自增后的out值返回
    }
    return inside;
}

let ref = outside();
console.log(ref()); // 此时控制台输出1

可以做个简单验证:修改后连续多次调用ref(),会发现输出值依次累加为2、3、4……说明闭包对out变量的持有完全正常,之前的异常纯粹是缺少返回语句导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:09:48