mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 18:32:22 +00:00
edit errors
This commit is contained in:
parent
3da320f724
commit
c6d6fa358b
@ -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
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user