JavaScript:yield表达式的返回值

在阅读本篇之前,你需要先了解生成器(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)的探讨请参见:

  1. JavaScript:生成器(Generator)
  2. JavaScript:yield表达式的返回值
  3. JavaScript:生成器(Generator)中的return语句
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容