为什么两个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
相关产品推荐
相关产品推荐

