这是JavaScript上带有return关键字的预期行为吗
由于一个愚蠢的错误,我今天差点发疯。问题是,我不确定这是否是一种预期的行为 根据我在C#上的习惯,我编写了以下javascript代码,并试图了解出了什么问题,因为它没有返回任何内容,甚至没有向控制台写入任何错误:这是JavaScript上带有return关键字的预期行为吗,javascript,Javascript,由于一个愚蠢的错误,我今天差点发疯。问题是,我不确定这是否是一种预期的行为 根据我在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);
然后(半小时后),我更改了下面的代码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中应对这些情况的实用建议: 后缀++或--运算符应与它的 操作数 return或throw语句中的表达式应以相同的开头 行作为返回或抛出标记 break或continue语句中的标识符应位于同一位置 行作为中断或继续标记
好的,另一个证明JavaScript不是C#的证据,它是一种真正的“f”型语言。谢谢我真的不知道是谁建议可以省略分号,但很明显,他那样做的时候心情很好。