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