美文网首页
JavaScript 面试系列:如何理解 ES6 中 Gener

JavaScript 面试系列:如何理解 ES6 中 Gener

作者: you的日常 | 来源:发表于2022-10-19 16:52 被阅读0次
image.png

一、介绍

Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同

回顾下上文提到的解决异步的手段:

  • 回调函数
  • promise

那么,上文我们提到 promsie 已经是一种比较流行的解决异步方案,那么为什么还出现 Generator?甚至 async/await 呢?

该问题我们留在后面再进行分析,下面先认识下 Generator

Generator函数

执行 Generator 函数会返回一个遍历器对象,可以依次遍历 Generator 函数内部的每一个状态

形式上,Generator 函数是一个普通函数,但是有两个特征:

  • function 关键字与函数名之间有一个星号
  • 函数体内部使用 yield 表达式,定义不同的内部状态
function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}

二、使用

Generator 函数会返回一个遍历器对象,即具有 Symbol.iterator 属性,并且返回给自己

function* gen(){
  // some code
}

var g = gen();

g[Symbol.iterator]() === g
// true

通过 yield 关键字可以暂停 generator 函数返回的遍历器对象的状态

function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}
var hw = helloWorldGenerator();

上述存在三个状态:hello、world、return

通过 next 方法才会遍历到下一个内部状态,其运行逻辑如下:

相关文章

网友评论

      本文标题:JavaScript 面试系列:如何理解 ES6 中 Gener

      本文链接:https://www.haomeiwen.com/subject/ninezrtx.html