Genertor 編程
是一個普通函數,可是有兩個特徵: 異步
調用 Generator 函數後,該函數並不執行,異步編程
返回的也不是函數運行結果,而是一個指向內部狀態的指針對——遍歷器對象(Iterator Object)函數
必須調用 遍歷器對象 newIterator.next()
方法,使得指針移向下一個狀態,spa
直到遇到 yield,yield 表達式就是暫停標誌,並將緊跟在 yield 後面的那個表達式的值,做爲返回的對象的 value 屬性值指針
function* helloWorldGenerator() { yield 'hello'; yield 'world'; return 'ending'; }; var newIterator = helloWorldGenerator(); // 還未執行
hw.next(); // { value: 'hello', done: false } // 屬性 就是當前 表達式的值
hw.next(); // { value: 'world', done: false }
hw.next(); // { value: 'ending', done: true } // 遍歷已經結束了
hw.next(); // { value: undefined, done: true } //
valueyieldhello
該函數有三個狀態:'hello','world' 和 return 語句(結束執行)code
ES6 提供的一種異步編程解決方案,語法行爲與傳統函數徹底不一樣對象
語法上,首先能夠把它理解成,Generator 函數是一個狀態機,封裝了多個內部狀態blog
執行 Generator 函數會返回一個遍歷器對象,返回的遍歷器對象,能夠依次遍歷 Generator 函數內部的每個狀態io
4
4
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
55
5
5
5
5
5
5
5
5
55
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5