JavaScript 使用函数声明
函数*声明 用于定义返回Generator对象的生成器。生成器在异步编程中非常强大,因为它们旨在解决回调问题。
在生成器中,使用 yield 关键字代替return。yield语句暂停函数的执行并将一个值返回给调用者,但保留足够的状态以使函数能够从上次执行状态恢复。因此,函数在上次yield运行后立即继续执行。使用 next() 方法返回一个具有两个属性done和value的对象,并可用于前进到生成器的下一个状态。
语法:
function* function_name(param1, param2...)
{
function body
}
下面的示例演示了function*声明的使用。
示例1
这个示例展示了函数*的声明,以及yield和next()的使用。
<script>
// Declaring a generator function
function* generator(i) {
yield i;
yield i + 50;
yield i + 100;
}
// Initialize the generator
const generate = generator(50);
// Console out the object returned
// by the next() method
let nextValObj = generate.next();
// Console out the value of the object
console.log(nextValObj.value);
// Console out next iterations
// of the generator
console.log(generate.next().value);
console.log(generate.next().value);
// This value would be undefined as
// the last defined one is i + 100
console.log(generate.next().value);
</script>
输出:
50
100
150
undefined
示例2
此示例演示函数的声明*和yield和next()的使用。
<script>
function* powerup(n) {
for (let num = n; ; num *= n) {
// Yield out the current number
yield num;
}
}
for (let power of powerup(5)) {
// Break if the number is
// more than 1024
if (power > 1024)
break;
console.log("Yielded:", power)
}
</script>
输出结果:
Yielded: 5
Yielded: 25
Yielded: 125
Yielded: 625
极客教程