1楣富、Iterator迭代器 ->遵循迭代模式思想實現(xiàn)嗡呼,分為內(nèi)部迭代器源祈、外部迭代器虫溜,聚焦點:添加迭代接口
(1).迭代模式:其提供一種方法可順序獲得聚合對象中的各個元素合敦,其可讓用戶通過特定的接口巡防集合中的每個元素而不需了解底層實現(xiàn)桩皿,例如for, for..in..forEach();等豌汇; ->?最簡單、常見的設(shè)計模式
(2).迭代器興起原因:最初后端提供數(shù)組數(shù)據(jù)給前端泄隔,前端for循環(huán)遍歷即可拒贱,但由于業(yè)務(wù)逐漸變復(fù)雜,數(shù)據(jù)結(jié)構(gòu)也在逐步發(fā)生變化佛嬉,例如對象逻澳、Set、Map等暖呕,導(dǎo)致前端遍歷接口大量重寫 -> ES6提出了Iterator迭代器[Symbol.iterator]斜做;
內(nèi)部迭代器:for;? for...in..;? forEach();? $.each();? $().each();等? ->?系統(tǒng)提供好的;
外部迭代器:ES6中引入Iterator迭代器湾揽,將其部署在了Array,?字符串瓤逼,NodeList, arguments, Set, Map等數(shù)據(jù)的Symbol.iterator屬性上,使它們具備“迭代接口”库物;->?對象沒有迭代接口霸旗,我們可以手動添加;
迭代接口數(shù)據(jù)的“遍歷方法”:?for...of..; Array.from(); ...運算符戚揭; -> ES6提供的“更專業(yè)”的遍歷方法定硝;
補充:日常開發(fā)中 ->?普通數(shù)據(jù)使用for循環(huán)遍歷(聚焦點:循環(huán)圈數(shù));對象使用for..in遍歷操作(prop是屬性名毫目,不確定循環(huán)圈數(shù)蔬啡,不建議使用for循環(huán));數(shù)組使用forEach();Map();filter();系列方法镀虐;jQuery還提供了$.each(); $().each();?Array,?字符串箱蟆,NodeList, arguments, Set, Map等數(shù)據(jù)使用for..of(prop為屬性值); Array.from(); ...運算符即可; ->?實際它們底層封裝的都是for循環(huán)刮便;
(3).添加迭代接口空猜;
2、Generator生成器 -> 返回迭代對象恨旱,函數(shù)內(nèi)配合yield使用辈毯,其會分段執(zhí)行,遇到y(tǒng)ield即暫停?
- - - >>>?開發(fā)中經(jīng)常采用 "Generator生成器+promise對象+Co庫"?更加優(yōu)雅的解決回調(diào)地獄搜贤,巧妙的利用了Generator的特性谆沃,但Generator生成器的主要功能是生成“迭代對象”;ES7?async+await?底層實現(xiàn)有部分是Generator生成器+promise對象+Co庫仪芒,所以它可以理解為“語法糖”唁影,但其內(nèi)部不僅僅限于處理回調(diào)地獄,其還可以解決try..catch..捕獲異步錯誤掂名,以及解決同步并發(fā)的異步問題(有些牽強据沈,可理解為解決一些特殊需求),開發(fā)中主要是解決回調(diào)地獄饺蔑;