【JS第42期】GeneratorFunction 詳解

  • 在js中,生成器函數實際上就是GeneratorFunction的實例對象
  • GeneratorFunction並非一個全局對象,它能夠經過以下代碼獲取
Object.getPrototypeOf(function*(){}).constructor
複製代碼
  • 使用GeneratorFunction比使用function* 表達式建立函數效率要低
  • 使用GeneratorFunction構造函數建立的生成器函數不會爲其建立上下文建立閉包;它們始終在全局範圍內建立。
  • 當運行它們時,它們只能訪問本身的本地變量和全局變量,而不是從GeneratorFunction構造函數調用的範圍的變量。這與使用eval與生成函數表達式的代碼不一樣。以下:
var b = 5
{
  let b = 10
  var GeneratorFunction = Object.getPrototypeOf(function*(){}).constructor
  var g = new GeneratorFunction("a", "yield a * b * 2");
  var iterator = g(10);
  console.log(iterator.next().value); // 100
  function test() {
    console.log(b)
  }
  test() // 10
}
複製代碼
  • 將GeneratorFunction構造函數調用爲函數(不使用new運算符)與將其做爲構造函數調用的效果相同。 若有侵權,請發郵箱至wk_daxiangmubu@163.com 或留言,本人會在第一時間與您聯繫,謝謝!!
    關注咱們
    長按二維碼關注咱們,瞭解最新前端資訊
相關文章
相關標籤/搜索