下面我将为您详细讲解JavaScript中yield实用简洁实现方式的完整攻略。
什么是yield?
在ES6中,yield是一个全新的关键字。yield出现在* 函数中,可以使函数暂停执行,yield关键字可以将控制权交给函数外部的调用者。
yield有助于实现可中断的长时间运行的函数,并逐步提供它们的值。
yield的用法
yield语句放置了一个值,并暂停执行一个生成器函数。该值可以由函数的外部调用者接收到。
以下是yield语句的基本用法:
function* generator() {
console.log('First');
yield 1;
console.log('Second');
yield 2;
console.log('Last');
yield 3;
console.log('End');
}
const iterator = generator();
console.log(iterator.next()); // First { value: 1, done: false }
console.log(iterator.next()); // Second { value: 2, done: false }
console.log(iterator.next()); // Last { value: 3, done: false }
console.log(iterator.next()); // End { value: undefined, done: true }
在示例代码中,生成器函数generator
定义了yield
语句三次。每当iterator.next()
在生成器函数中遇到一个yield
语句时,暂停函数的执行并返回一个值。在这个例子中,iterator.next()
的第一次调用返回{ value: 1, done: false }
。
需要注意的是,当Iterator完成迭代时,它的value
属性为undefined
,done
属性为true
。
yield实用简洁实现方式
通常使用yield
需要在一个生成器函数内部使用,但也可以使用yield*
表达式将yield作为一个委托器(生成函数)使用,相当于生成器可以将控制权转移给另一个生成器。
以下是使用yield*
的实现方式:
function* generateNumbers(min, max) {
for (let i = min; i <= max; i++) {
yield i;
}
}
function* generateEvenNumbers(min, max) {
for (let i of generateNumbers(min, max)) {
if (i % 2 === 0) {
yield i;
}
}
}
const iterator = generateEvenNumbers(1, 10);
console.log(iterator.next().value); // 2
console.log(iterator.next().value); // 4
console.log(iterator.next().value); // 6
console.log(iterator.next().value); // 8
console.log(iterator.next().value); // 10
在代码中,generateNumbers
和generateEvenNumbers
都是生成器函数。generateEvenNumbers
内部使用了yield*
表达式,把控制权交给另一个生成器函数generateNumbers
。示例代码输出了1到10之间的偶数。
最后,这就是JavaScript中yield实用简洁实现方式的完整攻略,希望能够对您有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中yield实用简洁实现方式 - Python技术站