docs: add class-extends

This commit is contained in:
ruanyf
2017-06-07 09:22:06 +08:00
parent 3e302652a0
commit 165ba46cea
4 changed files with 835 additions and 804 deletions
+10 -8
View File
@@ -1,10 +1,10 @@
# letconst命令
# letconst 命令
## let命令
## let 命令
### 基本用法
ES6新增了`let`命令,用来声明变量。它的用法类似于`var`,但是所声明的变量,只在`let`命令所在的代码块内有效。
ES6 新增了`let`命令,用来声明变量。它的用法类似于`var`,但是所声明的变量,只在`let`命令所在的代码块内有效。
```javascript
{
@@ -21,10 +21,12 @@ b // 1
`for`循环的计数器,就很合适使用`let`命令。
```javascript
for (let i = 0; i < 10; i++) {}
for (let i = 0; i < 10; i++) {
// ...
}
console.log(i);
//ReferenceError: i is not defined
// ReferenceError: i is not defined
```
上面代码中,计数器`i`只在`for`循环体内有效,在循环体外引用就会报错。
@@ -41,9 +43,9 @@ for (var i = 0; i < 10; i++) {
a[6](); // 10
```
上面代码中,变量`i``var`声明的,在全局范围内都有效,所以全局只有一个变量`i`。每一次循环,变量`i`的值都会发生改变,而循环内被赋给数组`a``function`在运行时,会通过闭包读到这同一个变量`i`,导致最后输出的是最后一轮的`i`的值,也就是10。
上面代码中,变量`i``var`命令声明的,在全局范围内都有效,所以全局只有一个变量`i`。每一次循环,变量`i`的值都会发生改变,而循环内被赋给数组`a`函数内部的`console.log(i)`,里面的`i`指向的就是全局的`i`。也就是说,所有数组`a`的成员里面的`i`,指向的都是同一个`i`,导致运行时输出的是最后一轮的`i`的值,也就是10。
如果使用`let`,声明的变量仅在块级作用域内有效,最后输出的是6。
如果使用`let`,声明的变量仅在块级作用域内有效,最后输出的是6。
```javascript
var a = [];
@@ -69,7 +71,7 @@ for (let i = 0; i < 3; i++) {
// abc
```
上面代码输出了3次`abc`这表明函数内部的变量`i`不同于循环变量`i`,有自己单独的作用域。
上面代码正确运行,输出了3次`abc`这表明函数内部的变量`i`循环变量`i`不在同一个作用域,有各自单独的作用域。
### 不存在变量提升