From c6d6fa358b27fc128f583ef18251f4ceb4c2161c Mon Sep 17 00:00:00 2001 From: ruanyf Date: Mon, 19 Oct 2015 21:05:44 +0800 Subject: [PATCH] edit errors --- docs/function.md | 25 +++++++++++++++++++++---- docs/iterator.md | 17 ++++++++++++++++- docs/promise.md | 2 +- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/docs/function.md b/docs/function.md index bc649fe..1125504 100644 --- a/docs/function.md +++ b/docs/function.md @@ -66,6 +66,9 @@ function fetch(url, { body = '', method = 'GET', headers = {} }){ fetch('http://example.com', {}) // "GET" + +fetch('http://example.com') +// 报错 ``` 上面代码中,传入函数`fetch`的第二个参数是一个对象,调用的时候可以为它的三个属性设置默认值。 @@ -83,18 +86,32 @@ fetch('http://example.com') 上面代码中,调用函数`fetch`时,第二个参数默认为一个空对象,而只要有第二个参数,`method`参数就默认为`GET`。 -定义了默认值的参数,必须是函数的尾参数,其后不能再有其他无默认值的参数。这是因为有了默认值以后,该参数可以省略,只有位于尾部,才可能判断出到底省略了哪些参数。 +通常情况下,定义了默认值的参数,都是函数的尾参数。因为这样比较容易看出来,到底省略了哪些参数。但是,非尾部的参数,也是可以设置默认值的。 ```javascript -// 以下两种写法都是错的 - -function f(x = 5, y) { +// 例一 +function f(x=1, y) { + return [x, y]; } +f() // [1, undefined] +f(2) // [2, undefined]) +f(, 1) // 报错 +f(undefined, 1) // [1, 1] + +// 例二 function f(x, y = 5, z) { + return [x, y, z]; } + +f() // [undefined, 5, undefined] +f(1) // [1, 5, undefined] +f(1,,2) // 报错 +f(1, undefined, 2) // [1, 5, 2] ``` +上面代码中,有默认值的参数都不是尾参数。这时,无法只省略该参数,而不省略它后面的参数,除非显式输入`undefined`。 + 如果传入`undefined`,将触发该参数等于默认值,null则没有这个效果。 ```javascript diff --git a/docs/iterator.md b/docs/iterator.md index f197fc2..c9536a3 100644 --- a/docs/iterator.md +++ b/docs/iterator.md @@ -233,7 +233,7 @@ NodeList.prototype[Symbol.iterator] = [][Symbol.iterator]; [...document.querySelectorAll('div')] // 可以执行了 ``` -下面是对象调用数组的`Symbol.iterator`方法的例子。 +下面是类似数组的对象调用数组的`Symbol.iterator`方法的例子。 ```javascript let iterable = { @@ -248,6 +248,21 @@ for (let item of iterable) { } ``` +注意,普通对象部署数组的`Symbol.iterator`方法,并无效果。 + +```javascript +let iterable = { + a: 'a', + b: 'b', + c: 'c', + length: 3, + [Symbol.iterator]: Array.prototype[Symbol.iterator] +}; +for (let item of iterable) { + console.log(item); // undefined, undefined, undefined +} +``` + 如果`Symbol.iterator`方法对应的不是遍历器生成函数(即会返回一个遍历器对象),解释引擎将会报错。 ```javascript diff --git a/docs/promise.md b/docs/promise.md index 4742654..27afe3a 100644 --- a/docs/promise.md +++ b/docs/promise.md @@ -526,7 +526,7 @@ function run (generator) { return result.value.then(function (value) { return go(it.next(value)); }, function (error) { - return go(it.throw(value)); + return go(it.throw(error)); }); }