美文网首页
迭代器和可迭代对象,生成器,内存管理&垃圾回收

迭代器和可迭代对象,生成器,内存管理&垃圾回收

作者: 我家有个王胖胖 | 来源:发表于2022-06-21 20:07 被阅读0次
可迭代对象.png
迭代器与迭代对象关系.png

1.获取迭代器

let arr = [1, 2, 3];
//获取迭代器
let itr = arr[Symbol.iterator]();

console.log(itr.next()); //{ value: 1, done: false }
console.log(itr.next()); //{ value: 2, done: false }
console.log(itr.next()); //{ value: 3, done: false }
console.log(itr.next()); //{ value: undefined, done: true }

2.如何创建可迭代对象
①具有键值为Symbol.iterator的方法,返回一个可迭代对象
②对象字面量要拥有next()方法

 let obj = {
    start: 1,
    end: 5
}

obj[Symbol.iterator] = function() {
    const iterator = {
        next() {
            if (obj.start <= obj.end) {
                return {
                    value: obj.start++,
                    done: false
                }
            } else {
                return {
                    value: undefined,
                    done: true
                }
            }
        }
    }
    return iterator;
}

for (const item of obj) {
    console.log(item); //1 2 3 4 5
}

生成器:


生成器.png
生成器函数特点.png
//yeild 使用方法 可暂停
let genFunction = function*() {
    console.log(1);
    yield "yeild value";
    console.log(2);
    yield;
    console.log(3);
}
let genObj = genFunction();

console.log(genObj.next()); // 1 { value: 'yeild value', done: false }
console.log(genObj.next()); // 2 { value: undefined, done: false }
console.log(genObj.next()); // 3 { value: undefined, done: true }

//迭代器与生成器一起使用
let obj = {
    start: 1,
    end: 5,
    [Symbol.iterator]: function*() { //*[Symbol.iterator]() {
        for (let index = obj.start; index <= obj.end; index++) {
            yield index;
        }
    }
}

for (const item of obj) {
    console.log(item); // 1 2 3 4 5
}
//当在递归函数或被另一个生成器函数调用的时候,使用yeild*语法
function* gen1() {
    console.log("hello world");
}

function* gen2() {
    // const gen = gen1();
    // gen.next();
    //以上代码可优化为
    yield* gen1();
}
const g2 = gen2();

g2.next(); // hello world
生成器面试题1.png
生成器面试题2.png

内存管理&垃圾回收


内存管理.png
垃圾回收.png

标记清除


image.png

相关文章

  • 迭代器和可迭代对象,生成器,内存管理&垃圾回收

    1.获取迭代器 2.如何创建可迭代对象①具有键值为Symbol.iterator的方法,返回一个可迭代对象②对象字...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • Python可迭代对象,迭代器,生成器关系

    列表,元组,字符串,迭代器,生成器都是可迭代对象。所以,可迭代对象不一定是迭代器,生成器。 将一个可迭代对象传递给...

  • 迭代器

    可迭代对象(Iterable): for迭代器(Iterator): for + next生成器属于迭代器。 验...

  • 可迭代对象、迭代器、生成器

    可迭代对象 --> 迭代器 --> 生成器; 可迭代对象:实现了__iter__()方法的对象,该方法返回迭代对象...

  • 2-1迭代对象、迭代器、生成器

    可迭代对象、迭代器和生成器的关系 可迭代对象 可迭代对象实现某种接口,对与列表内部实现了__iter__()方法,...

  • 迭代器和生成器

    迭代器和生成器 迭代器 hasattr(list,'iter')True 判断列表是否为可迭代对象 lst = [...

  • yield and Iterator

    Generator(生成器) 生成器是特殊的迭代器,迭代器不一定是生成器。 生成器与迭代器均是可迭代对象。 目前学...

  • Python中的迭代器和生成器

    今天我们来学习下Python中的迭代器和生成器。 迭代和可迭代对象 在学习迭代器之前,我们需要了解下迭代和可迭代对...

  • 迭代机制

    可迭代对象、迭代器、生成器、生成式区别 a. 可迭代对象: 一个对象能够被迭代的使用,这个对象就是可迭代对象 b....

网友评论

      本文标题:迭代器和可迭代对象,生成器,内存管理&垃圾回收

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