2021 年 5 月 29 日

代码结构

我们首先要学习的是代码的构建块。

语句

语句是执行动作的语法结构和命令。

我们已经看到一条语句,alert('Hello, world!'),它显示消息“Hello, world!”。

我们的代码中可以包含任意多条语句。语句可以用分号分隔。

例如,这里我们将“Hello World”拆分为两个警报

alert('Hello'); alert('World');

通常,语句会写在不同的行上,以便让代码更易于阅读

alert('Hello');
alert('World');

分号

在大多数情况下,当存在换行符时,分号可以省略。

这也可以

alert('Hello')
alert('World')

此处,JavaScript 将换行符解释为“隐式”分号。这称为自动分号插入

在大多数情况下,换行符表示分号。但“大多数情况下”并不意味着“始终”!

在某些情况下,换行符并不表示分号。例如

alert(3 +
1
+ 2);

代码输出6,因为 JavaScript 在此处不插入分号。直观上很明显,如果该行以加号"+"结尾,则它是一个“不完整表达式”,因此那里的分号是不正确的。在这种情况下,它按预期工作。

但在某些情况下,JavaScript“无法”在真正需要的地方假定分号。

在这些情况下发生的错误很难找到并修复。

错误示例

如果您有兴趣查看此类错误的具体示例,请查看此代码

alert("Hello");

[1, 2].forEach(alert);

暂时无需考虑方括号[]forEach的含义。我们稍后会研究它们。现在,只需记住运行代码的结果:它显示Hello,然后显示1,然后显示2

现在,让我们删除alert后的分号

alert("Hello")

[1, 2].forEach(alert);

与上述代码相比,只有一个字符不同:第一行末尾的分号消失了。

如果我们运行此代码,则仅显示第一个Hello(并且有一个错误,您可能需要打开控制台才能看到它)。不再有数字了。

这是因为 JavaScript 不会在方括号[...]之前假定分号。因此,最后一个示例中的代码被视为一个语句。

以下是引擎的看法

alert("Hello")[1, 2].forEach(alert);

看起来很奇怪,对吧?在这种情况下,这种合并是错误的。我们需要在alert后面加一个分号,才能使代码正常工作。

在其他情况下也可能发生这种情况。

我们建议即使语句由换行符分隔,也要在语句之间加分号。社区广泛采用此规则。让我们再次注意——有可能在大多数情况下省略分号。但使用它们更安全——尤其是对于初学者。

评论

随着时间的推移,程序变得越来越复杂。有必要添加描述代码的作用和原因的注释

注释可以放在脚本的任何位置。它们不会影响其执行,因为引擎只是忽略它们。

单行注释以两个正斜杠字符 // 开头。

该行的其余部分是注释。它可以占据自己的一整行,或跟随一个语句。

就像这里

// This comment occupies a line of its own
alert('Hello');

alert('World'); // This comment follows the statement

多行注释以正斜杠和星号 /* 开头,以星号和正斜杠 */ 结束。

就像这样

/* An example with two messages.
This is a multiline comment.
*/
alert('Hello');
alert('World');

注释的内容被忽略,所以如果我们在 /* … */ 中放置代码,它将不会执行。

有时暂时禁用部分代码可能很方便

/* Commenting out the code
alert('Hello');
*/
alert('World');
使用热键!

在大多数编辑器中,可以通过按 Ctrl+/ 热键对单行注释进行注释,而对多行注释进行注释则类似于 Ctrl+Shift+/(选择一段代码并按热键)。对于 Mac,尝试使用 Cmd 而不是 Ctrl,使用 Option 而不是 Shift

不支持嵌套注释!

另一个 /*...*/ 中可能没有 /*...*/

此类代码将因错误而终止

/*
  /* nested comment ?!? */
*/
alert( 'World' );

请不要犹豫,对您的代码进行注释。

注释会增加整体代码占用空间,但这根本不是问题。在发布到生产服务器之前,有许多工具可以压缩代码。它们会删除注释,因此它们不会出现在工作脚本中。因此,注释根本不会对生产产生负面影响。

稍后在教程中将有一章 代码质量,其中还将说明如何编写更好的注释。

教程地图

评论

在评论之前阅读此内容…
  • 如果您有改进建议,请 提交 GitHub 问题或提交拉取请求,而不是发表评论。
  • 如果您无法理解文章中的内容 - 请详细说明。
  • 要插入几行代码,请使用 <code> 标签,对于多行代码 - 将其包装在 <pre> 标签中,对于超过 10 行的代码 - 使用沙盒 (plnkrjsbincodepen…)