前置知识:
-
生成器 generator函数: 比起普通的函数,函数名和function之间多了*,乍一看很像c++的指针。
function * generatorForLoop(num) { for (let i = 0; i < num; i += 1) { yield console.log(i); } } const genForLoop = generatorForLoop(5); genForLoop.next(); // 首先 { value: 'console.log (0)', done: false } genForLoop.next(); // 以此类推... 1 genForLoop.next(); // 2 genForLoop.next(); // 3 genForLoop.next(); // 4 genForLoop.next(); { value: 'undefined', done: true }
从这里看出,在执行next的时候,才输出了。因此generator 中最重要的特性—— 我们只有在使用next()的时候,才去运行它到yield,而不是执行所有代码。
-
next(): next function 会返回一个对象,里面包含着两个properties,分别是
value
和done
。
value:就是我们在前一段中从yield那个位置接到的「值」。
done :一个个boolean 值,如果这次generator function 执行完了,done就会变成true,反之是false。注意完全执行完的意思是:是当执行到最后一个yield时,done仍然会是false,再执行一次才会得到done为true的结果,此时的value肯定是null。 -
yeild: 普通的yeild就像return,下次从yeild那一句继续运行。
-
在next(x