ES6遍歷器 生成器 學習整理

遍歷器[迭代器](Iterator)

就是這樣一種機制。它是一種接口,爲各類不一樣的數據結構提供統一的訪問機制。任何數據結構只要部署 Iterator 接口,就能夠完成遍歷操做(即依次處理該數據結構的全部成員)。數組

Iterator 的做用有三個:數據結構

一、是爲各類數據結構,提供一個統一的、簡便的訪問接口;函數

二、是使得數據結構的成員可以按某種次序排列;spa

三、是 ES6 創造了一種新的遍歷命令for...of循環,Iterator 接口主要供for...of消費。code

示例代碼orm

//迭代器示例
function  newIterator(arr) {
  let index = 0;

  return {
    next:()=>{
      if(index<arr.length){
        return {value:arr[index++]}
      }
      return {value:'無數據值'}
      
    }
  }
}

const nit=newIterator(['第一次','第二次','第三次']);

console.log( nit.next().value)
console.log( nit.next().value)
console.log( nit.next().value)
console.log( nit.next().value)
console.log( nit.next().value)


/**
輸出結果

第一次
第二次
第三次
無數據值
無數據值
**/
給某一實例增長迭代器

Symbol.iterator屬性自己是一個函數,就是當前數據結構默認的遍歷器生成函數。執行這個函數,就會返回一個遍歷器。至於屬性名Symbol.iterator,它是一個表達式,返回Symbol對象的iterator屬性,這是一個預約義好的、類型爲 Symbol 的特殊值,因此要放在方括號內對象

Symbol 是 ES6 引入了一種新的原始數據類型Symbol,表示獨一無二的值blog

const obj = {
  [Symbol.iterator] : function () {
    return {
      next: function () {
        return {
          value: 1,
          done: true
        };
      }
    };
  }
};

生成器函數 Generator

生成器函數語法能夠理解爲對迭代器簡化,爲了更便捷的使用迭代器而出現的生成器函數。用來達到語法層面的代碼精簡;接口

Generator 能夠看做是數據結構,更確切地說,能夠看做是一個數組結構,由於 Generator 函數能夠返回一系列的值,這意味着它能夠對任意表達式,提供相似數組的接口。部署

示例代碼

function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}

var hw = 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 }
**/

for...of循環能夠自動遍歷 Generator 函數時生成的Iterator對象,且此時再也不須要調用next方法。

相關文章
相關標籤/搜索