ES6---对yield和yield*的明白

观点

yieldyield*都是合营Generator举行运用的。

yield

yield是关键字,其语法以下:

[rv] = yield [expression];
  • expression:是Generator函数返回的遍历器对象挪用next要领是所获得的值;
  • rv:是遍历其对象挪用next要领是传递给next要领的参数

这里要简朴的说一下next要领,其语法以下:

gen.next(value)

value:传递给Generator函数的值,也就是上文中的rv

这里比较有意思的就是传递给next要领的值value,下面经由过程例子来看一下:

function* _testYieldExpression(){
    let value = '';
    value = yield 'yield value';
    console.info(`1 value is: ${value}`);//输出1

    value = yield 'yield value';
    console.info(`2 value is: ${value}`);//输出2
    return 'over';
}

let _testIterator = _testYieldExpression();
let _res = _testIterator.next();
console.info(`1:no params to next, result is: ${_res.value}`);//输出3

_res = _testIterator.next('params from next');
console.info(`2:params to next, result is: ${_res.value}`);//输出4

_res = _testIterator.next();
console.info(`3:params to next, result is: ${_res.value}`);//输出    512345678910111213141516171819

输出以下:

1:no params to next, result is: yield value
1 value is: params from next
2:params to next, result is: yield value
2 value is: undefined
3:params to next, result is: over12345

解释中标记了几个输出语句,

输出1

是在第二次挪用next要领是实行,能够看到,此时的value值是传递给next要领的参数,然则在_testYieldExpression函数中能够看到value = yield yield value,所以能够理解为,在第一次实行next函数的时刻,语句yield yield value没有返回值,而且没有赋值给value,而在第二次挪用next时,才将next函数的参数赋值给value。虽然有些杂沓,然则假如打断点来看的话会越发清楚。

yield*

yield*是表达式,因而又返回值,其语法以下:

yield* [[expression]];

expression:是可遍历对象,能够是数组,也能够是别的一个Generator函数的实行表达式,等等

其实说简朴点,就是将多个yield语句依据某种划定规矩合并为一个,示例以下:

function* g3() {
  yield* [1, 2];
  yield* '34';
  yield* Array.from(arguments);
}

var iterator = g3(5, 6);

console.log(iterator.next()); // {value: 1, done: false}
console.log(iterator.next()); // {value: 2, done: false}
console.log(iterator.next()); // {value: "3", done: false}
console.log(iterator.next()); // {value: "4", done: false}
console.log(iterator.next()); // {value: 5, done: false}
console.log(iterator.next()); // {value: 6, done: false}
console.log(iterator.next()); // {value: undefined, done: true}
    原文作者:time
    原文地址: https://segmentfault.com/a/1190000016143719
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞