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

为什么两个JavaScript函数返回对象的运行结果不一致?

问题原因

这个问题是JavaScript的**自动分号插入(ASI,Automatic Semicolon Insertion)**机制导致的。

JS解析器有一条明确的ASI规则:如果return关键字后面直接跟着换行,不管换行后有没有其他内容,解析器都会自动在return后面插入分号,直接终止return语句的执行。

你写的两个函数会被解析器处理成如下形式:

// func1解析后和你写的一致,返回对象符合预期
function func1(){
    return {
        test1: "success"
    };
}

// func2的return后被自动插入了分号
function func2(){
    return; // 自动插入的分号,直接返回undefined
    // 下方的对象代码属于不可达代码,永远不会执行
    {
        test2: "success"
    };
}

这就是为什么func2没有返回你预期的对象,实际返回值是undefined。

避坑方案
  • 优先把返回值的开头和return放在同一行,比如对象字面量的左大括号紧跟return,就是func1的写法。
  • 如果返回内容太长需要换行,可以用括号把返回内容整体包裹,即可避免自动插入分号:
function func2(){
    return (
        {
            test2: "success"
        }
    );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:30:02