1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00

edit errors

This commit is contained in:
ruanyf 2015-10-19 21:05:44 +08:00
parent 3da320f724
commit c6d6fa358b
3 changed files with 38 additions and 6 deletions

View File

@ -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

View File

@ -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

View File

@ -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));
});
}