1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-25 03:02:21 +00:00

doc(iterator): fix 示例代码

This commit is contained in:
ruanyf 2016-05-11 19:55:41 +08:00
parent 9322419906
commit 2b53f9fc0d
2 changed files with 14 additions and 8 deletions

View File

@ -198,7 +198,7 @@ foo(undefined, null)
(function (a, b, c = 5) {}).length // 2 (function (a, b, c = 5) {}).length // 2
``` ```
上面代码中,`length`属性的返回值等于函数的参数个数减去指定了默认值的参数个数。比如上面最后一个函数定义了3个参数其中有一个参数`c`指定了默认值,因此`length`属性等于3减去1最后得到2。 上面代码中,`length`属性的返回值等于函数的参数个数减去指定了默认值的参数个数。比如上面最后一个函数定义了3个参数其中有一个参数`c`指定了默认值,因此`length`属性等于`3`减去`1`,最后得到`2`
这是因为`length`属性的含义是该函数预期传入的参数个数。某个参数指定默认值以后预期传入的参数个数就不包括这个参数了。同理rest参数也不会计入`length`属性。 这是因为`length`属性的含义是该函数预期传入的参数个数。某个参数指定默认值以后预期传入的参数个数就不包括这个参数了。同理rest参数也不会计入`length`属性。
@ -206,6 +206,13 @@ foo(undefined, null)
(function(...args) {}).length // 0 (function(...args) {}).length // 0
``` ```
如果设置了默认值的参数不是尾参数,那么`length`属性也不再计入后面的参数了。
```javascript
(function (a = 0, b, c) {}).length // 0
(function (a, b = 1, c) {}).length // 1
```
### 作用域 ### 作用域
一个需要注意的地方是,如果参数默认值是一个变量,则该变量所处的作用域,与其他变量的作用域规则是一样的,即先是当前函数的作用域,然后才是全局作用域。 一个需要注意的地方是,如果参数默认值是一个变量,则该变量所处的作用域,与其他变量的作用域规则是一样的,即先是当前函数的作用域,然后才是全局作用域。

View File

@ -20,7 +20,7 @@ Iterator的遍历过程是这样的。
每一次调用`next`方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含`value``done`两个属性的对象。其中,`value`属性是当前成员的值,`done`属性是一个布尔值,表示遍历是否结束。 每一次调用`next`方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含`value``done`两个属性的对象。其中,`value`属性是当前成员的值,`done`属性是一个布尔值,表示遍历是否结束。
下面是一个模拟next方法返回值的例子。 下面是一个模拟`next`方法返回值的例子。
```javascript ```javascript
var it = makeIterator(['a', 'b']); var it = makeIterator(['a', 'b']);
@ -172,7 +172,6 @@ function Obj(value){
} }
Obj.prototype[Symbol.iterator] = function(){ Obj.prototype[Symbol.iterator] = function(){
var iterator = { var iterator = {
next: next next: next
}; };
@ -182,7 +181,7 @@ Obj.prototype[Symbol.iterator] = function(){
function next(){ function next(){
if (current){ if (current){
var value = current.value; var value = current.value;
var done = current === null; var done = current.next === undefined;
current = current.next; current = current.next;
return { return {
done: done, done: done,