mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-25 03:02:21 +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', {})
|
fetch('http://example.com', {})
|
||||||
// "GET"
|
// "GET"
|
||||||
|
|
||||||
|
fetch('http://example.com')
|
||||||
|
// 报错
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,传入函数`fetch`的第二个参数是一个对象,调用的时候可以为它的三个属性设置默认值。
|
上面代码中,传入函数`fetch`的第二个参数是一个对象,调用的时候可以为它的三个属性设置默认值。
|
||||||
@ -83,18 +86,32 @@ fetch('http://example.com')
|
|||||||
|
|
||||||
上面代码中,调用函数`fetch`时,第二个参数默认为一个空对象,而只要有第二个参数,`method`参数就默认为`GET`。
|
上面代码中,调用函数`fetch`时,第二个参数默认为一个空对象,而只要有第二个参数,`method`参数就默认为`GET`。
|
||||||
|
|
||||||
定义了默认值的参数,必须是函数的尾参数,其后不能再有其他无默认值的参数。这是因为有了默认值以后,该参数可以省略,只有位于尾部,才可能判断出到底省略了哪些参数。
|
通常情况下,定义了默认值的参数,都是函数的尾参数。因为这样比较容易看出来,到底省略了哪些参数。但是,非尾部的参数,也是可以设置默认值的。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// 以下两种写法都是错的
|
// 例一
|
||||||
|
function f(x=1, y) {
|
||||||
function f(x = 5, y) {
|
return [x, y];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
f() // [1, undefined]
|
||||||
|
f(2) // [2, undefined])
|
||||||
|
f(, 1) // 报错
|
||||||
|
f(undefined, 1) // [1, 1]
|
||||||
|
|
||||||
|
// 例二
|
||||||
function f(x, y = 5, z) {
|
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则没有这个效果。
|
如果传入`undefined`,将触发该参数等于默认值,null则没有这个效果。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -233,7 +233,7 @@ NodeList.prototype[Symbol.iterator] = [][Symbol.iterator];
|
|||||||
[...document.querySelectorAll('div')] // 可以执行了
|
[...document.querySelectorAll('div')] // 可以执行了
|
||||||
```
|
```
|
||||||
|
|
||||||
下面是对象调用数组的`Symbol.iterator`方法的例子。
|
下面是类似数组的对象调用数组的`Symbol.iterator`方法的例子。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
let iterable = {
|
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`方法对应的不是遍历器生成函数(即会返回一个遍历器对象),解释引擎将会报错。
|
如果`Symbol.iterator`方法对应的不是遍历器生成函数(即会返回一个遍历器对象),解释引擎将会报错。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -526,7 +526,7 @@ function run (generator) {
|
|||||||
return result.value.then(function (value) {
|
return result.value.then(function (value) {
|
||||||
return go(it.next(value));
|
return go(it.next(value));
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
return go(it.throw(value));
|
return go(it.throw(error));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user