我亲眼目睹了JavaScript中的这种行为,但我不知道如何搜索它的原因,所以我有以下问题。
据我所知,多行语句适用于JavaScript,例如:
var text = "abc" +
"xyz";
但是当它是这样的时候:
// returns undefined
return
"some text";
野应!它返回undefined
这是一个应该返回字符串的基本语句。但是这个版本没有像我期望的那样工作。
那么我们在这里遇到了什么?我很好奇。
答案 0 :(得分:9)
问题是automatic semicolon insertion的恐怖。 JavaScript的ASI规则将在;
之后插入return
,为您提供:
return;
"some text";
这看起来很奇怪,但它有效 - 它没有值return
,所以函数调用返回undefined
,然后在函数末尾有一个表达式(是有效的,但什么也没做。)
您可以通过执行您所做的操作(将其全部放在一行)来修复它,这是我建议的,或者更改它以便ASI规则不会启动,例如使用parens:< / p>
return (
"some text"
);
(我不是主张使用parens,只是说它会解决这个问题。)
在评论中,您已经询问过哪些其他情况会出现新行可能会在您不希望触发ASI时触发ASI。它们相当罕见,return
之后的新线是迄今为止最大的线。这是另一个例子:
return
{
result: "success"
};
在那里,作者想要返回一个对象,而是成为遇到代码的ASI错误的牺牲品。
此处的外卖信息是:如果您要返回某些内容,请将其开头与return
放在同一行。这消除了ASI导致问题的绝大多数情况。
Axel Rauschmayer有关于ASI的a good article以及何时/为什么要在他的博客上开球(值得关注)。它唯一的非返回示例是:
a
++
c
...触发ASI并成为
a;
++
c
......但是原版开头很狡猾。 : - )
答案 1 :(得分:1)
return语句返回/结束程序的函数或事件处理程序的控制。所以在那之后它不会执行下一个语句。空返回语句undefined而不是下一行的字符串。