简单JavaScript

JavaScript:yield表达式的返回值

2018-08-10  本文已影响0人  路秋原

在阅读本篇之前,你需要先了解生成器(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语句
上一篇 下一篇

猜你喜欢

热点阅读