在阅读本篇之前,你需要先了解生成器(Generator)的基础知识,如果还没有,请阅读JavaScript:生成器(Generator)。
先看如下代码:
function* valueOfYield() {
let value_of_yield = yield 1;
console.log("value of yield: ", value_of_yield);
}
let it = valueOfYield();
it.next(); // {value: 1, done: false}
// 至此,yield 1被运行,但let value_of_yield = 还没有被 运行
it.next(); // {value: undefined, done: true}
// 至此,函数valueOfYield中的代码全部被运行,console.log输出value of yield: undefined
我们可以看到,表达式yield 1
的返回值为undefined
。这里要注意的一点是,yield
表达式的返回值与next
函数的返回值不同,next
函数的返回值与yield
之后的值有关,而yield
表达式的值却与此无关。例如yield 1
的返回值为undefined
,而对应的next
函数的返回值为1
。
我们可以从外部改变yield
表达式的返回值。请看如下代码:
function* valueOfYield() {
let value_of_yield = yield 1;
console.log("value of yield: ", value_of_yield);
}
let it = valueOfYield();
it.next(); // {value: 1, done: false}
// 至此,yield 1被运行,但let value_of_yield = 还没有被 运行
it.next("hello world"); // {value: undefined, done: true}
// 至此,函数valueOfYield中的代码全部被运行,console.log输出value of yield: hello world
next
函数的参数即为上一个yield
表达式的返回值。
更多关于生成器(Generator)的探讨请参见: