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

这是JavaScript上带有return关键字的预期行为吗,javascript,Javascript,由于一个愚蠢的错误,我今天差点发疯。问题是,我不确定这是否是一种预期的行为 根据我在C#上的习惯,我编写了以下javascript代码,并试图了解出了什么问题,因为它没有返回任何内容,甚至没有向控制台写入任何错误: this.fullName = ko.computed(function () { return this.firstName() + " " + this.lastName(); }, this); 然后(半小时后),我更改了下面的代码a,它成功了:

由于一个愚蠢的错误,我今天差点发疯。问题是,我不确定这是否是一种预期的行为

根据我在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);

这是预期的行为吗?

是。它是隐式分号

以下是类似情况的解释:

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

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

是的。Javascript不需要在行的末尾使用分号来结束语句。在本例中,它只返回。

是的,javascript中的分号往往是可选的,因此没有确切的方法仅使用分号来区分完整的语句。看看这本书,我听说它是JS的一个很好的资源,douglas crockford的javascript的好部分。

javascript有一个特点是自动插入分号,这不好,你不应该依赖它,在语句结束时添加分号

在您的例子中,javascript添加
返回
语句。因此,这与:

return;
this.firstName() + " " + this.lastName();
是的,这是Javascript规范,定义了如下行为

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

更进一步

当遇到continue、break、return或throw标记时 在下一个标记之前遇到LineTerminator,将使用分号 在继续、中断、返回或抛出后自动插入 代币

return或throw语句中的表达式应以相同的开头 行作为返回或抛出标记。

他们给出了一个例子:

源头

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

return;
a + b;

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

return;
        this.firstName() + " " + this.lastName();
在返回的末尾自动添加分号


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

后缀++--运算符应与它的 操作数

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

breakcontinue语句中的标识符应位于同一位置 行作为中断或继续标记


好的,另一个证明JavaScript不是C#的证据,它是一种真正的“f”型语言。谢谢我真的不知道是谁建议可以省略分号,但很明显,他那样做的时候心情很好。