Generator和Symbol的使用

by Mike Lin

HTML

<script src="https://getfirebug.com/firebug-lite-debug.js"></script>

JavaScript

function* generator () {
  yield 'h'
  yield 'e'
  yield 'l'
  yield 'l'
  yield 'o'
}

var g = generator()

// 因为有@@iterator,所以它是可迭代的
typeof g[Symbol.iterator] === 'function'
// 它是一个迭代器,因为它有.next方法
typeof g.next === 'function'
// generator对象的迭代器是generator对象本身
g[Symbol.iterator]() === g

// 可以使用ES6的spread特性迭代或者Array.from
console.log([...g])
//console.log(Array.from(g))