美文网首页
javascript高级程序设计8

javascript高级程序设计8

作者: glassUp | 来源:发表于2022-03-26 18:43 被阅读0次

    第七章 迭代器和生成器

    一.迭代器(循环是迭代器的基础)
    1.1 很多内置类型都实现了Iterable接口(满足可迭代协议),就是可迭代对象
    字符串
    数组
    映射
    集合
    arguments对象
    NodeList等Dom集合类型
    实现Iterable接口的都暴露了一个属性作为“默认迭代器”,这个属性就是Symbol.iterator,这个默认迭代器属性引用了一个迭代器工厂函数,调用这个函数就会返回一个新的迭代器。

    let str = 'abc';
    console.log(str[Symbol.iterator]);     //返回了迭代器工厂函数
    console.log(str[Symbol.iterator]());      //调用这个迭代器工厂函数,返回一个迭代器
    

    怎么实现迭代的
    迭代器API使用next()方法在可迭代对象中遍历数据,每next()一次,就会返回一个iteratorResult对象,这个对象里面包含了done和value这两个值,done就是做完了吗,返回true或者false,value就是返回的值。

    let arr = ["foo","bar"];       //这是一个可迭代对象
    let iter = arr[Symbol.iterator]();       //调用工厂函数生成迭代
    console.log(iter.next());     //{done:"false",value:"foo"}
    console.log(iter.next());      //{done:"false",value:"bar"}
    console.log(iter.next());      //{done:"true",value:"undefined"}
    

    在写代码过程中用不带这个显示调用迭代器函数工厂,理解原理就行了,循环中会自动用的

    二.生成器
    生成器的形式是一个函数,函数名称前面加上一个星号(*)表示是一个生成器
    yield关键字可以让生成器停止和开始执行,也是生成器最有用的地方

    function *fn(){
    yield 1;
    yield 2;
    yield 3;
    };
    for(const x of fn()){
    console.log(x)
    }                                       //1    //2   //3    三次循环得出的结果
    

    相关文章

      网友评论

          本文标题:javascript高级程序设计8

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