这是JavaScript上带有return关键字的预期行为吗

Is this an expected behavior with return keyword on JavaScript

本文关键字:关键字 JavaScript return 这是      更新时间:2023-09-26

我今天差点因为一个愚蠢的错误而大发雷霆。问题是,我不确定这是否是一种预期的行为。

根据我对C#的习惯,我编写了以下javascript代码,并试图了解出了什么问题,因为它没有返回任何内容,甚至没有在控制台中写入任何错误:

this.fullName = ko.computed(function () {
    return
        this.firstName() + " " + this.lastName();
}, this);

然后(半小时后),我更改了下面的代码a,它起作用了:

this.fullName = ko.computed(function () {
    return this.firstName() + " " + this.lastName();
}, this);

这是预期的行为吗?

是。它是隐含的分号。

以下是类似的情况和解释:http://premii.com/lab/js_implicit_semicolon_and_return.php

简而言之:您的第一个代码段被解释为:

this.fullName = ko.computed(function () {
    return;
    this.firstName() + " " + this.lastName();
}, this);

Yes ECMA Spec,它是Javascript规范,定义了类似以下的行为

某些ECMAScript语句(空语句、…返回语句和抛出语句)必须终止使用分号。此类分号可能总是显式出现在源文本但是,为了方便,可以省略此类分号在某些情况下从源文本。这些情况是描述为分号自动插入在这些情况下的源代码令牌流。

更多

当遇到continue、break、return或throw令牌并且在下一个标记之前遇到LineTerminator,分号为在continue、break、return或throw之后自动插入代币

return或throw语句中的表达式应在行作为返回或抛出标记

他们给出了一个的例子

return
a + b

通过自动插入分号转换为以下内容:

return;
a + b;

因此,您的第一个代码将被解释为:

return;
        this.firstName() + " " + this.lastName();

在返回的末尾自动添加分号。


因此,规范给出了在一般情况下面对这些情况的实用建议javascript:

后缀++--运算符应与其出现在同一行操作数。

returnthrow语句中的表达式应在相同的行作为返回或抛出标记。

breakcontinue语句中的标识符应在同一个行作为中断或继续标记。

是的。Javascript不需要在语句末尾使用分号。在这种情况下,它只是返回。 是的,javascript中的分号往往是可选的,因此没有确切的方法只使用分号来区分完整的语句。看看这本书,我听说它是JS的一个很好的资源,douglas Crackford的javascript的好部分。

Javascript有一个特点,那就是自动插入分号,这是不好的,你不应该依赖它并在语句完成时添加分号。

在这种情况下,javascript将;添加到return语句中。因此它与相同

return;
this.firstName() + " " + this.lastName();