我今天濒临把所有的头发拉到一个愚蠢的错误上。问题是我不确定这是否是预期的行为。
根据我对C#的习惯,我编写了以下javascript代码并尝试了解出现了什么问题,因为它没有返回任何内容,甚至没有在控制台中写入任何错误:
this.fullName = ko.computed(function () {
return
this.firstName() + " " + this.lastName();
}, this);
然后(半小时后),我改变了下面的代码,它起作用了:
this.fullName = ko.computed(function () {
return this.firstName() + " " + this.lastName();
}, this);
这是预期的行为吗?
答案 0 :(得分:10)
是。这是隐含的分号。
以下是与解释类似的情况:http://premii.com/lab/js_implicit_semicolon_and_return.php
简而言之:您的第一个片段被解释为:
this.fullName = ko.computed(function () {
return;
this.firstName() + " " + this.lastName();
}, this);
答案 1 :(得分:4)
是ECMA Spec,这是Javascript规范,定义了这样的行为
必须终止某些ECMAScript语句(空语句,... return语句和throw语句) 用分号。这样的分号可能总是明确地出现在 源文本。 为方便起见,可以省略分号 在某些情况下从源文本。这些情况是 描述分号会自动插入 这些情况下的源代码令牌流。
更多
当遇到继续,中断,返回或抛出令牌时a 在下一个标记之前遇到LineTerminator,分号是 继续,中断,返回或抛出后自动插入 令牌。
表达式或抛出语句应该从同一个开始 line作为return或throw标记。
他们给出了示例:
来源
return
a + b
通过自动分号插入转换为以下内容:
return;
a + b;
因此,您的第一个代码将被解释为:
return;
this.firstName() + " " + this.lastName();
在返回结束时自动添加半冒号。
因此规范提供了一般javascript中面对这些情况的实用建议:
后缀 ++ 或 - 运算符应与其相同的行显示 操作数。
return 或 throw 语句中的表达式应该以相同的方式开始 line作为return或throw标记。
中断或继续语句中的标识符应该是相同的 作为中断或继续令牌的行。
答案 2 :(得分:1)
是的,确实如此。 Javascript在行尾不需要分号来结束语句。在这种情况下,它只是返回。
答案 3 :(得分:0)
是的,javascript中的分号往往是可选的,所以没有确切的方法来区分仅使用分号的完整语句。看看这本书,我听说它是JS的一个很好的资源,是douglas crockford的javascript的好部分。
答案 4 :(得分:0)
Javascript有一个自动分号插入的羽毛,这不好,你不应该依赖它并在语句结束时添加分号。
在您的情况下,javascript将;
添加到return
语句中。所以它与:
return;
this.firstName() + " " + this.lastName();