Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 14 additions & 16 deletions 1-js/02-first-steps/04-variables/article.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 变量

大多数情况下,脚本需要处理信息。这有两个例子:
大多数情况下,JavaScript 应用需要处理信息。这有两个例子:
1. 一个网上商店 —— 这里的信息可能包含正在售卖的商品和购物车
2. 一个聊天应用 —— 这里的信息可能包括用户、消息等等。

Expand All @@ -12,7 +12,7 @@

在 JavaScript 中创建一个变量,我们需要用到 `let` 关键字。

下面的语句创建(换句话说,**声明**或者**定义**)了一个名称为 "message" 的变量:
下面的语句创建(换句话说,**声明**或者**定义**)了一个名称为message的变量:

```js
let message;
Expand Down Expand Up @@ -70,7 +70,7 @@ let user = 'John',
message = 'Hello';
```

...甚至使用“逗号优先”的形式:
……甚至使用“逗号优先”的形式:

```js no-beautify
let user = 'John'
Expand All @@ -97,14 +97,13 @@ let user = 'John'

如果将变量想象成一个“数据”的盒子,盒子上有一个唯一的标注盒子名字的贴纸。这样我们能更轻松地掌握“变量”的概念。

例如,变量 `message` 可以被想象成一个标有 `"message"` 的盒子,在盒子里面,有一个值为 `"Hello!"`
例如,变量 `message` 可以被想象成一个标有 `"message"` 的盒子,在盒子里面,有一个值为 `"Hello!"`

![](variable.png)

我们可以在盒子内放入任何值。

同样,我们也可以改变它。值可以根据需要多次改变。

同样,我们也可以改变它。值可以根据需要多次改变:
```js run
let message;

Expand Down Expand Up @@ -141,14 +140,14 @@ alert(message); // Hello world!

在这种类型的语言中,一旦值保存在盒子中,就永远存在。如果你试图保存其他值,它会强制创建一个新盒子(声明一个新变量),无法重用先前的变量。

虽然看上去有点奇怪,但是这些语言有很大的发展潜力。不仅如此,在某些领域,比如并行计算,这个限制有一定的好处。研究这样的一门语言(即使不打算很快就用上它)有助于开阔视野。
虽然第一次看上去有点奇怪,但是这些语言有很大的发展潜力。不仅如此,在某些领域,比如并行计算,这个限制有一定的好处。研究这样的一门语言(即使不打算很快就用上它)有助于开阔视野。
```

## 变量命名 [#variable-naming]

JavaScript 的变量命名有两个限制:

1. 变量名称必须仅包含字母,数字,符号 `$` and `_`。
1. 变量名称必须仅包含字母,数字,符号 `$` `_`。
2. 首字符必须非数字。

有效的命名,例如:
Expand Down Expand Up @@ -179,7 +178,7 @@ let 1a; // 不能以数字开始
let my-name; // 连字符 '-' 不允许在命名中出现
```

```smart header="大小写的影响"
```smart header="区分大小写"
命名为 `apple` 和 `AppLE` 的变量是不同的两个变量。
```

Expand All @@ -195,7 +194,7 @@ let 我 = '...';
````

````warn header="保留字"
有一长串的保留字无法用作变量命名,因为它们被语言本身采用了。
有一张[保留字列表](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Keywords)无法用作变量命名,因为它们被语言本身采用了。

比如,单词 `let`、`class`、`return`、`function` 被保留。

Expand Down Expand Up @@ -228,7 +227,6 @@ alert(num); // 5
num = 5; // error: num is not defined
*/!*
```

````

## 常量
Expand Down Expand Up @@ -256,7 +254,7 @@ myBirthday = '01.01.2001'; // 错误,不能对常量重新赋值

这些常量使用大写和下划线命名。

就像这样
例如,让我们以所谓“web”(十六进制)的格式为颜色声明常量

```js run
const COLOR_RED = "#F00";
Expand All @@ -275,9 +273,9 @@ alert(color); // #FF7F00
- 比起 `COLOR_ORANGE` 而言,`"#FF7F00"` 更容易输错。
- 阅读代码时,`COLOR_ORANGE` 比 `#FF7F00` 更有含义。

什么时候该为常量使用大写命名,什么时候常规命名让我们弄清楚一点:
什么时候该为常量使用大写命名,什么时候常规命名让我们弄清楚一点:

作为一个常数,意味着值永远不变。但是有些常量在执行之前就已知了(比如红色的十六进制值),还有些在执行期间实时“计算”,赋值之后才不会改变
作为一个“常数”,意味着值永远不变。但是有些常量在执行之前就已知了(比如红色的十六进制值),还有些在执行期间被“计算”出来,但初始赋值之后就不会改变

例如:
```js
Expand All @@ -292,7 +290,7 @@ const pageLoadTime = /* time taken by a webpage to load */;

谈到变量,还有一件非常重要的事。

请合理地命名变量。如果有需要,花时间思考一下
一个变量名应该有一个清晰、明显的含义,描述了它存储的数据

变量命名是编程过程中最重要和最复杂的技能之一。快速地浏览变量的命名就知道代码是一个初学者还是有经验的开发者书写的。

Expand All @@ -314,7 +312,7 @@ const pageLoadTime = /* time taken by a webpage to load */;

结果是,这个变量就像是被扔进不同东西盒子,而没有改变它的贴纸。现在里面是什么?谁知道呢。我们需要靠近一点,然后检查它。

这样的程序员节省了一点变量声明的时间,但却在调试代码的时候损失数十倍
这样的程序员节省了一点变量声明的时间,但却在调试代码的时候损失数十倍时间

额外声明一个变量绝对是利大于弊的。

Expand Down