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

docs(generator): edit yield

This commit is contained in:
ruanyf 2017-02-26 21:46:18 +08:00
parent c108637656
commit 938c0cb461

View File

@ -108,9 +108,9 @@ setTimeout(function () {
}, 2000); }, 2000);
``` ```
上面代码中,函数`f`如果是普通函数,在为变量`generator`赋值时就会执行。但是,函数`f`是一个Generator函数就变成只有调用`next`方法时,函数`f`才会执行。 上面代码中,函数`f`如果是普通函数,在为变量`generator`赋值时就会执行。但是,函数`f`是一个 Generator 函数,就变成只有调用`next`方法时,函数`f`才会执行。
另外需要注意,`yield`语句不能用在普通函数中,否则会报错。 另外需要注意,`yield`语句只能用在 Generator 函数里面,用在其他地方都会报错。
```javascript ```javascript
(function (){ (function (){
@ -141,7 +141,7 @@ for (var f of flat(arr)){
} }
``` ```
上面代码也会产生句法错误,因为`forEach`方法的参数是一个普通函数,但是在里面使用了`yield`语句(这个函数里面还使用了`yield*`语句,这里可以不用理会,详细说明见后文)。一种修改方法是改用`for`循环。 上面代码也会产生句法错误,因为`forEach`方法的参数是一个普通函数,但是在里面使用了`yield`语句(这个函数里面还使用了`yield*`语句,详细介绍见后文)。一种修改方法是改用`for`循环。
```javascript ```javascript
var arr = [1, [[2, 3], 4], [5, 6]]; var arr = [1, [[2, 3], 4], [5, 6]];
@ -167,21 +167,25 @@ for (var f of flat(arr)) {
另外,`yield`语句如果用在一个表达式之中,必须放在圆括号里面。 另外,`yield`语句如果用在一个表达式之中,必须放在圆括号里面。
```javascript ```javascript
console.log('Hello' + yield); // SyntaxError function* demo() {
console.log('Hello' + yield 123); // SyntaxError console.log('Hello' + yield); // SyntaxError
console.log('Hello' + yield 123); // SyntaxError
console.log('Hello' + (yield)); // OK console.log('Hello' + (yield)); // OK
console.log('Hello' + (yield 123)); // OK console.log('Hello' + (yield 123)); // OK
}
``` ```
`yield`语句用作函数参数或赋值表达式的右边,可以不加括号。 `yield`语句用作函数参数或放在赋值表达式的右边,可以不加括号。
```javascript ```javascript
foo(yield 'a', yield 'b'); // OK function* demo() {
let input = yield; // OK foo(yield 'a', yield 'b'); // OK
let input = yield; // OK
}
``` ```
### 与Iterator接口的关系 ### 与 Iterator 接口的关系
上一章说过,任意一个对象的`Symbol.iterator`方法,等于该对象的遍历器生成函数,调用该函数会返回该对象的一个遍历器对象。 上一章说过,任意一个对象的`Symbol.iterator`方法,等于该对象的遍历器生成函数,调用该函数会返回该对象的一个遍历器对象。