理解ES6 yield

本文详细介绍了JavaScript中的生成器函数和yield关键字,阐述了其如何暂停和恢复函数执行,以及如何通过next()方法传递值。通过示例解释了yield在输入输出和计算过程中的作用,展示了如何利用生成器实现复杂的逻辑。最后提供了一个具体的例子,演示了yield在计算过程中的应用,展示了生成器在处理迭代和控制流程中的强大功能。
摘要由CSDN通过智能技术生成

以下内容是学习时的笔记,仅供自己学习使用。
yiedl关键字可以让生成器停止执行和开始执行,相当于一个特殊的return。当生成器碰到yield时会停止执行,并且函数作用域会得到保留,停止运行后可以通过next()方法来恢复运行。

function* test() {
	yield;
	yield 'aaa';
}
let a = test();
console.log(a.next()); // [done: false,value: undefined]
console.log(a.next()); // [done: false, value: 'aaa']

碰到yield而停止执行时返回的done是false,而通过return退出时done是true 。
可以通过yield实现输入输出。上一次执行的yield会接收next()方法的第一个值,但第一次执行next()除外。

function *test(init) {
	console.log(init);
	console.log(yield);
	console.log(yield);
}
let a = test('one');
a.next(); // one
a.next('two'); // two
a.next('three');// three

加深理解下:

function * test(x) {
  var y = 2*(yield(x + 1));
  var z = yield(y/3);
  console.log(`x:${x} y:${y} z: ${z}`);
  return x+y+z;
}
let a = test(3);
a.next(); // [done:false,value:4]
a.next(3); // [done:false,value:2]
a.next(4); // x: 3 y: 6 z: 4

yield关键字会返回它右边表达式的值,功能相当与return,除第一次执行next()方法外,每次执行next()方法的第一个参数的值就成为上一个yield的值,比如上一个例子中,当执行a.next(3)时,yield的值就变成了3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值