zoukankan      html  css  js  c++  java
  • es6学习笔记二:生成器 Generators

    今天这篇文章让我感到非常的兴奋,接下来我们将一起领略ES6中最具魔力的特性。

    为什么说是“最具魔力的”?对于初学者来说,此特性与JS之前已有的特性截然不同,可能会觉得有点晦涩难懂。但是,从某种意义上来说,它使语言内部的常态行为变得更加强大,如果这都不算有魔力,我不知道还有什么能算。

    不仅如此,此特性可以极大地简化代码,它甚至可以帮助你逃离“回调地狱”。

    既然新特性如此神奇,那么就一起深入了解它的魔力吧!

    ES6生成器(Generators)简介:

    什么是生成器?

    我们从一个示例开始:

    function* quips(name) {
        yield "你好 " + name + "!";
        yield "希望你能喜欢这篇介绍ES6的译文";
        if(name.startsWith("X")) {
            yield "你的名字 " + name + "  首字母是X,这很酷!";
        }
        yield "我们下次再见!";
    }

    这段代码很可能代表着当今互联网上最重要的一类应用,如果感到困惑,可以点击这里查看,然后再回来接着阅读。

    这段代码看起来很像一个函数,我们称之为生成器函数,它与普通函数有很多共同点,但是二者有如下区别:

    • 普通函数使用function声明,而生成器函数使用function*声明。
    • 在生成器函数内部,有一种类似return的语法:关键字yield。二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yield一次)。在生成器的执行过程中,遇到yield表达式立即暂停,后续可恢复执行状态。

    这就是普通函数和生成器函数之间最大的区别,普通函数不能自暂停,生成器函数可以。

    生成器做了什么?

    当你调用quips()生成器函数时发生了什么?

    > var iter = quips("jorendorff");
      [object Generator];
    > iter.next();
      { value: "你好 jorendorff!", done: false };
    > iter.next();
      { value: "希望你能喜欢这篇介绍ES6的译文", done: false };
    > iter.next();
      { value: "我们下次再见!", done: false };
    > iter.next();
      { value: undefined, done: true };

    你大概已经习惯了普通函数的使用方式,当你调用它们时,它们立即开始运行,直到遇到return或抛出异常时才退出执行,作为JS程序员你一定深谙此道。

    .....

  • 相关阅读:
    3种Java从文件路径中获取文件名的方法
    win10系统下点击关机却自动重启的问题解决思路
    Eclipse窗口总是在最前的解决办法
    tomcat端口被占用
    js页面跳转整理(转载未整理)
    java.lang.IllegalArgumentException 不合法的参数异常
    MySQL如何查询两个日期之间的记录
    web -- 前端访问后台跨区问题解决
    Maven -- 发布jar包至远程仓库
    5 -- Hibernate的基本用法 --4 3 JDBC连接属性
  • 原文地址:https://www.cnblogs.com/tanxiang6690/p/7417550.html
Copyright © 2011-2022 走看看