Generator函数

2020-12-28  本文已影响0人  jasmine_6aa1
1,定义

概念:Generator是一个迭代器生成函数,器返回值是一个 Iterator 对象,可用异步调用

2,语法:
let  generalFunc = function *(){
    consloe.log(1)
    yield:'a';
    yield:'b';
    return 'c';
}
generalFunc() // 没有输出
generalFunc().next() // 1  value:'a', done:false
generalFunc().next() // value:'b', done:false

// generalFunc 单纯的调用,是没有任何输出的
// 启动:generalFunc().next()
// 1 value:'a', done:false
// value:'b', done:false => 表示函数还没有全部结束,只是到该暂停的阶段
// value:'c', done:true => 表示函数已经全部结束了,没有

3,与普通函数区别:

可以暂停执行,所以要加 * 号,以示区别
特点:交出函数的执行权(即暂停执行)

4,执行机制:

案例1

let  generalFunc = function *(){
    consloe.log(1)
    yield:'a';
    yield:'b';
    return 'c';
}
generalFunc() // 调用没有任何输出,返回是 Iterator 对象,并不是函数内部的执行
generalFunc().next() // 1  value:'a', done:false
generalFunc().next() // value:'b', done:false

案例2



注:执行的原理

4,for...of
let  generalFunc = function *(){
    consloe.log(1)
    yield:'a';
    yield:'b';
    return 'c';
}
for (var v of generalFunc ) {
    console.log(v)  // 1 a  b 
}

注:for....of... 迭代 Generator 函数时,只能遍历 yield 打印出来,return 是不能打印出来的

Generator 与 Iterator 关系
Generator 是 Iterator 的生成器
需求:让 object 具有 Iterator 接口



上一篇下一篇

猜你喜欢

热点阅读