ES6新特性:Generator函数

简介: ES6新特性:Generator函数

说明


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

Generator函数有两个特征:


  • function命令与函数名 之间有一个'*'


  • 函数体内部使用 yield语句定义不同的内部状态。


Generator函数定义


function* hello() {
  yield "hello";
  yield "world";
  return "done";
}
let h = hello(); // 此时拿到的是一个Generator对象


当调用它的next时 ,才会进入它的方法体,遇到yield,直接返回语句内容 ,并停止执行后面的语句,第二次调用next时 ,会执行下一条yield


例如打印上面定义的 Generator函数变量


console.log(h.next()); //{value:"hello", done: false} 
console.log(h.next()); //{value:"world", done: false}
console.log(h.next()); //{value:"done", done: true}
console.log(h.next()); //{value: undefined, done: true}



通过执行结果我们可以看到,通过hello()返回的h对象,每调用一次next()方法返回一个对象,该对象包含了value值和done状态。


直到遇到return关键字或者函数执行完毕,这个时候返回的状态为ture,表示已经执行结束了。


循环遍历


通过for…of可以循环遍历Generator函数返回的迭代器。


let y = hello();
for (let v of y) {
  console.log(v); //输出 hello world 
}



代码案例


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>ES6新特性学习-(13)-Generator函数</title>
  </head>
  <body>
    <script>
      function* hello() {
        yield "hello";
        yield "world";
        return "done";
      }
      let h = hello(); // 拿到一个Generator对象
      console.log(h.next()); //{value:"hello", done: false} 
      console.log(h.next()); //{value:"world", done: false}
      console.log(h.next()); //{value:"done", done: true} d
      console.log(h.next()); //{value: undefined, done: true}
      // 通过for...of可以循环遍历Generator函数返回的迭代器。
      let y = hello();
      for (let v of y) {
        console.log(v); //输出 hello world 
      }
    </script>
  </body>
</html>
相关文章
|
6月前
|
前端开发
ES6之生成器(Generator)
生成器(Generator)是ES6引入的一种特殊的函数,它可以通过yield关键字来暂停函数的执行,并返回一个包含value和done属性的对象。生成器的概念、作用和原理如下所述:
68 0
|
6月前
ES6 Generator 函数
ES6 Generator 函数
|
1月前
|
自然语言处理 前端开发
如何理解 ES6 中 Generator ?
【10月更文挑战第7天】
|
6月前
|
JavaScript 前端开发
js开发:请解释什么是ES6的Generator函数,以及它的用途。
ES6的Generator函数是暂停/恢复功能的特殊函数,利用yield返回多个值,适用于异步编程和流处理,解决了回调地狱问题。例如,一个简单的Generator函数可以这样表示: ```javascript function* generator() { yield &#39;Hello&#39;; yield &#39;World&#39;; } ``` 创建实例后,通过`.next()`逐次输出&quot;Hello&quot;和&quot;World&quot;,展示其暂停和恢复的特性。
40 0
|
前端开发
Promise--ES6 的新特性
Promise--ES6 的新特性
68 0
|
11月前
ES6学习(九)—Generator 函数的语法
ES6学习(九)—Generator 函数的语法
|
网络架构
es6 语法简单使用1
es6 语法简单使用
74 0
|
前端开发
es6 语法简单使用2
es6 语法简单使用
64 0
|
前端开发
【ES6新特性】— Generator
【ES6新特性】— Generator
88 0
ES6 从入门到精通 # 15:生成器 Generator 的用法
ES6 从入门到精通 # 15:生成器 Generator 的用法
103 0
ES6 从入门到精通 # 15:生成器 Generator 的用法