JS筆記——生成器

生成器是ES6中新增的一個極爲靈活的結構,擁有在一個函數塊內暫停和恢復代碼執行的能力
1.生成器基礎
生成器的形式是一個函數,函數名稱前帶星號(*)表示他是一個生成器。只要是能夠定義函數的地方,就能夠定義生成器(箭頭函數不能用來定義生成器)函數

function *generatorFn(){} //生成器函數聲明

調用生成器函數會產生一個生成器對象。生成器對象一開始處於暫停執行狀態(suspended)。與迭代器類似,生成器對象也實現了Iterator接口,所以具備next()方法。調用這個方法會讓生成器開始或恢復執行
next()方法的返回值相似於迭代器,有一個done屬性和一個value屬性。函數體爲空的生成器函數中間不會停留,調用一次next()就會讓生成器到達 done:true 狀態code

function *generatorFn(){}
const g = generatorFn();
console.log( g ); //generatorFn{ <suspended> }
console.log( g.next ); //f next() { [native code] }
console.log( g.next() ); //{ done:true, value:undefined }

value屬性是生成器函數的返回值,默認爲undefined,能夠經過生成器函數的返回值指定:對象

function *generatorFn(){
      return 'foo';
}
......
console.log( g.next() ) //{ done:true, value:'foo' }

生成器函數只會在初次調用next()方法後開始執行接口

生產器對象實現了Iterator接口,他們默認的迭代器是自引用的generator

function *generatorFn() {}
console.log( generatorFn ); //f* generatorFn() {}
console.log( generatorFn()[Symbol.iterator] );//f [Symbol.iterator]() {native code}
console.log( generatorFn() ); //generatorFn{ <suspended> }
console.log( generatorFn()[Symbol.iterator] ); //generatorFn{ <suspended> }

2.經過yield中斷執行it

相關文章
相關標籤/搜索