语句

一、语句是执行行为(action)的语法结构和命令。
二、语句之间可以使用分号进行分割。

| 【示例】我们将 “Hello World” 这条信息一分为二:```html alert(‘Hello’); alert(‘World’);

  1. 通常,每条语句独占一行,以提高代码的可读性:```html
  2. alert('Hello');
  3. alert('World');

| | —- |

三、在JavaScript中,任何表达式(expression)都可以看作一条语句(statement)。

语句块 / 代码块

定义

一、最基本的语句是用于组合语句的语句块。该块由一对大括号界定

{
   statement_1;   
   statement_2;
   statement_3;
   .
   .
   .
   statement_n;
}

用途

一、语句块通常用于流程控制,如if, for, while等

| 【示例】```javascript while (x < 10) { x++ }

{ x++ } 就是语句 |
| --- |

| 【示例】块级作用域中的var x变量与之前的声明在同一个作用域内。```javascript
var x = 1
{
    var x = 2
}
alert(x) // 输出结果是2

| | —- |

声明的变量的作用范围

一、如果在代码块{…}内声明了一个变量,那么这个变量只在该代码块内可见。

| 【示例】```javascript { // 使用在代码块外不可见的局部变量做一些工作 let message = “Hello”; // 只在此代码块内可见 alert(message); // Hello }

alert(message); // Error: message is not defined

 |
| --- |

| 【示例】我们可以使用它来隔离一段代码,该段代码执行自己的任务,并使用仅属于自己的变量:```javascript
{
  // 显示 message
  let message = "Hello";
  alert(message);
}

{
  // 显示另一个 message
  let message = "Goodbye";
  alert(message);
}

| | —- |

二、如果我们使用let对已存在的变量进行重复声明,如果对应的变量没有单独的代码块,则会出现错误:

| 【示例】```javascript // 显示 message let message = “Hello”; alert(message);

// 显示另一个 message let message = “Goodbye”; // Error: variable already declared alert(message);

 |
| --- |

三、对于if,for和while等,在{...}中声明的变量也仅在内部可见:

| 【示例】```javascript
if (true) {
  let phrase = "Hello!";

  alert(phrase); // Hello!
}

alert(phrase); // Error, no such variable!

1、当if执行完毕,则下面的alert将看不到phrase,因此会出现错误。(译注:就算下面的alert想在if没执行完成时去取phrase(虽然这种情况不可能发生)也是取不到的,因为let声明的变量在代码块外不可见。)
2、因为这就允许我们创建特定于if分支的块级局部变量。 | | —- |

| 【示例】对于for和while循环也是如此:```javascript for (let i = 0; i < 3; i++) { // 变量 i 仅在这个 for 循环的内部可见 alert(i); // 0,然后是 1,然后是 2 }

alert(i); // Error, no such variable

1、从视觉上看,let i位于{...}之外。但是for构造在这里很特殊:在其中声明的变量被视为块的一部分。 |
| --- |


<a name="oGRpg"></a>
# 分号
一、当存在换行符(line break)时,在大多数情况下可以省略分号。

| 【示例】下面的代码也是可以运行的:```html
alert('Hello')
alert('World')

| | —- |

二、JavaScript 将换行符理解成“隐式”的分号。这也被称为自动分号插入。
1、在大多数情况下,换行意味着一个分号。但是“大多数情况”并不意味着“总是”!
2、有很多换行并不是分号的例子

| 【示例】```html alert(3 + 1

  • 2); ``` 1、代码输出6,因为 JavaScript 并没有在这里插入分号。
    2、显而易见的是,如果一行以加号”+”结尾,那么这是一个“不完整的表达式”,不需要分号。所以,这个例子得到了预期的结果。 | | —- |

三、存在 JavaScript 无法确定是否真的需要自动插入分号的情况。
1、这种情况下发生的错误是很难被找到和解决的。

| 【示例】```javascript [1, 2].forEach(alert)

1、运行结果:先显示1,然后显示2。 |
| --- |

| ☆-1【示例】我们在代码前面插入一个alert语句,并且不加分号:```javascript
alert("There will be an error")
[1, 2].forEach(alert)

1、现在,如果我们运行代码,只有第一个alert语句的内容被显示了出来,随后我们收到了一个错误!
2、但是,如果我们在第一个alert语句末尾加上一个分号,就工作正常了:```javascript alert(“All fine now”);

[1, 2].forEach(alert)

3、现在,我们能得到 “All fine now”,然后是1和2。 |
| --- |

2、无分号的变体(variant)会出现报错,是因为 JavaScript 并不会在方括号[...]前添加一个隐式的分号。

| ☆-1【示例】因为没有自动插入分号,【☆-1】中的代码被视为了一条简单的语句,我们从引擎看到的是这样的:```javascript
alert("There will be an error")[1, 2].forEach(alert)

1、但它应该是两条语句,而不是一条。这种情况下的合并是不对的,所以才会造成错误。诸如此类,还有很多。 | | —- |

四、即使语句被换行符分隔了,我们依然建议在它们之间加分号。

注释

一、你可以在脚本的任何地方添加注释,它们并不会影响代码的执行,因为引擎会直接忽略它们。
二、单行注释以两个正斜杠字符//开始。
1、它可能独占一行或者跟随在一条语句的后面。

| 【示例】```javascript // 这行注释独占一行 alert(‘Hello’);

alert(‘World’); // 这行注释跟随在语句后面

 |
| --- |

三、多行注释以一个正斜杠和星号开始“/*”并以一个星号和正斜杠结束“*/”。

| 【示例】```javascript
/* 两个消息的例子。
这是一个多行注释。
*/
alert('Hello');
alert('World');
注释的内容被忽略了,所以如果我们在/* … */中放入代码,并不会执行。
有时候,可以很方便地临时禁用代码:


/* 注释代码
alert('Hello');
*/
alert('World');

| | —- |

四、不要在//内嵌套另一个//

| 【示例】下面这段代码报错而无法执行:```javascript / / 嵌套注释 ?!? / / alert( ‘World’ );

 |
| --- |


<a name="FbPOv"></a>
## 记录函数的参数和用法
一、有一个专门用于记录函数的语法[JSDoc](http://en.wikipedia.org/wiki/JSDoc):用法、参数和返回值。
```javascript
/**
 * 返回 x 的 n 次幂的值。
 *
 * @param {number} x 要改变的值。
 * @param {number} n 幂数,必须是一个自然数。
 * @return {number} x 的 n 次幂的值。
 */
function pow(x, n) {
  ...
}

二、有一些像JSDoc 3这样的工具,可以通过注释直接生成 HTML 文档。你可以在http://usejsdoc.org/阅读更多关于 JSDoc 的信息。