对gererator函数的认识

在js中函数一旦运行,会运行到最后,或者遇到retuen 的时候。而generator函数打破了函数完成运行的可能。它的语法跟普通函数完全不同。

1:function关键字和函数型之间有个*号,推荐放在关键字后面。 

2:直接调用 Generator函数并不会执行,也不会返回运行结果,而是返回一个遍历器对象(Iterator Object)

3: 依次调用遍历器对象的next方法,遍历 Generator函数内部的每一个状态

4:体现了惰性,走一步停一步,yield是暂停 ,next()继续。

5:yield跟return的区别:相似之处都是返回了表达式的值,区别,每次遇到yield就会暂停执行,调用next之后再从该位置继续向后执行,而return语句执行完,函数也就执行完毕。一个函数只能执行一次return ,而生成器函数可以左右多个yield。因此再生成器函数中可以不必要return。

6:任何具有有效的[Symnol.iterator]接口的对象都是可迭代的,可以使用for of 遍历。for of 实际上调用的就是next方法。一旦next()方法发挥的对象的属性的done是true,for  of循环就是终止。且不包含该返回对象。

function* gen() {
    yield 1
    yield 2
    yield 3
    yield 4
    return 5
  }
  
  for(let item of gen()) {
    console.log(item)
  }
  
  // 1 2 3 4

7:生成器函数如果有return params,则最后的执行结果是{value:params,done:true},否则是 {value:undefined,done:true}

posted on 2021-01-24 09:55  冰love  阅读(144)  评论(0编辑  收藏  举报

导航