请考虑以下情况:
function func1() {
return {
hello: "world"
};
}
function func2() {
return
{
hello: "world"
};
}
console.log(func1());
console.log(func2());
第一个函数func1()
将返回对象{ hello: "world" }
,但是第二个函数func2()
将返回undefined
。 为什么?我猜想返回的值必须与return
关键字在同一行。我在这里不知道什么“规则”?
答案 0 :(得分:10)
“规则”为automatic semicolon insertion。
return
本身就是一个有效的语句,因此将其视为完整的语句。从下一行开始的代码在语法上也是有效的(尽管在这种情况下,它根本不解释为对象,而是包含标签和包含字符串文字的单个“语句”的代码块)。因此,这里自动插入了分号,并且将两者视为单独的语句。
在该行之后开始的对象将被忽略。
答案 1 :(得分:1)
这是因为自动分号插入。 JS引擎认为您在空白return;
语句上省略了分号,并“有帮助地”为您插入了分号。
除了删除换行符之外,您还可以通过在{..}
上加上括号来解决此问题,第一个括号与return
相同。