Skip to content

Commit

Permalink
修改grammar/basic/var
Browse files Browse the repository at this point in the history
  • Loading branch information
ruanyf committed Sep 19, 2013
1 parent e3015ca commit 0347839
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
2 changes: 1 addition & 1 deletion algorithm/sorting.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ modifiedOn: 2013-01-30

2. 再对最后一位以外的数组,重复前面的过程,直至全部排序完成。

由于每进行一次这个过程,在该次的最后一个位置上,正确的数会自己冒出来,就好像“冒泡”一样,这种算法因此得名。
由于每进行一次这个过程,在该次比较的最后一个位置上,正确的数会自己冒出来,就好像“冒泡”一样,这种算法因此得名。

以对数组[3, 2, 4, 5, 1] 进行从小到大排序为例,步骤如下:

Expand Down
24 changes: 19 additions & 5 deletions grammar/basic.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ var a = 1;

{% endhighlight %}

上面的代码先声明a,然后在变量a与数值1之间建立引用关系,也称将数值1“赋值”给变量a。以后,引用a就会得到数值1。最前面var,是变量声明命令。它表示通知解释器,要创建一个变量a。
上面的代码先声明变量a,然后在变量a与数值1之间建立引用关系,也称将数值1“赋值”给变量a。以后,引用变量a就会得到数值1。最前面的var,是变量声明命令。它表示通知解释引擎,要创建一个变量a。

变量的声明和赋值,是分开的两个步骤,上面的代码将它们合在了一起,实际的步骤是下面这样。

Expand All @@ -86,7 +86,9 @@ a

{% endhighlight %}

JavaScript允许省略var,直接对未声明的变量赋值。也就是说,var a = 1 与 a = 1,这两条语句的效果完全相同。但是由于这样的做法很容易不知不觉地创建全局变量(尤其是在函数内部),所以建议总是使用var命令声明变量。
JavaScript允许省略var,直接对未声明的变量赋值。也就是说,var a = 1 与 a = 1,这两条语句的效果相同。但是由于这样的做法很容易不知不觉地创建全局变量(尤其是在函数内部),所以建议总是使用var命令声明变量。

> (严格地说,var a = 1 与 a = 1,这两条语句的效果不完全一样,主要体现在delete命令无法删除前者。不过,绝大多数情况下,这种差异是可以忽略的。)
如果一个变量没有声明就直接使用,JavaScript会报错,告诉你变量未定义。

Expand Down Expand Up @@ -130,7 +132,7 @@ var a = 1;

{% endhighlight %}

上面的代码在声明变量a之前就使用它,是一种错误的做法,但是实际上不会报错。因为存在变量提升,真正运行的是下面的代码:
上面的代码首先使用console.log方法,在控制台(console)显示变量a的值。这时变量a还没有声明和赋值,所以这是一种错误的做法,但是实际上不会报错。因为存在变量提升,真正运行的是下面的代码:

{% highlight javascript %}

Expand Down Expand Up @@ -164,15 +166,27 @@ $elem

{% endhighlight %}

中文也可以用作变量名。
下面这些则是不合法的标识符。

{% highlight javascript %}

1a
23
***
a+b
-d

{% endhighlight %}

中文是合法的标识符,可以用作变量名。

{% highlight javascript %}

var 临时变量 = 1;

{% endhighlight %}

JavaScript语言有一些保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。
JavaScript有一些保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

另外,还有三个词虽然不是保留字,但是因为具有特别含义,也不应该用作标识符:Infinity、NaN、undefined。

Expand Down

0 comments on commit 0347839

Please sign in to comment.