寰俊鎼滅储銆愬ぇ鍗冧笘鐣屻€戯紝绗竴鏃堕棿涓哄ぇ瀹跺垎浜墠绔涓氬姩鎬併€佸涔犺矾寰勭瓑銆傛湰鏂囧凡鏀跺綍鍒癎itHubhttps://github.com/qq449245884/xiaozhi锛岄噷闈㈡湁瀹屾暣鐨勬祴璇曠珯鐐广€佽祫鏂欏拰鎴戠殑涓€绾垮巶鍟嗚璋堢郴鍒楁枃绔犮€傛儼鎬ф眰鍊兼儼鎬ф眰鍊煎父璇戜负鈥滃欢杩熻绠椻€濇垨鈥滄儼鎬ц绠椻€濓紝鎰忔€濇槸鍙湪鐪熸闇€瑕佹墽琛屾椂鎵嶈绠楄〃杈惧紡鐨勫€笺€傛儼鎬ф眰鍊肩殑瀵圭珛闈㈡槸鏃╂湡姹傚€硷紙eagerevaluation锛夛紝涔熺О涓鸿椽蹇冩眰鍊硷紙greedyevaluation锛夋垨涓ユ牸姹傚€硷紝鏄ぇ澶氭暟浼犵粺缂栫▼璇█鐨勬眰鍊肩瓥鐣ャ€傚厖鍒嗗埄鐢╨azyevaluation鐨勭壒鐐瑰甫鏉ョ殑濂藉涓昏浣撶幇鍦ㄤ互涓嬩袱涓柟闈細閬垮厤涓嶅繀瑕佺殑璁$畻鍜屾彁楂樻€ц兘銆傝妭鐪佺┖闂村苟浣挎棤闄愬惊鐜暟鎹粨鏋勬垚涓哄彲鑳姐€傝凯浠e櫒ES6涓殑杩唬鍣ㄦ敮鎸佹儼鎬ф眰鍊煎拰鍒涘缓鐢ㄦ埛瀹氫箟鐨勬暟鎹簭鍒椼€傝凯浠f槸涓€绉嶉亶鍘嗘暟鎹殑鏈哄埗銆傝凯浠e櫒鏄敤浜庨亶鍘嗘暟鎹粨鏋勶紙绉颁负Iterable锛夌殑鍏冪礌鐨勬寚閽堬紝鐢ㄤ簬浜х敓鍊煎簭鍒楃殑鎸囬拡銆傝凯浠e櫒鏄彲浠ヨ凯浠g殑瀵硅薄銆傚畠鎶借薄鏁版嵁瀹瑰櫒锛屼娇瀹冧滑琛ㄧ幇寰楀儚鍙凯浠e璞°€傝凯浠e櫒鍦ㄥ疄渚嬪寲鏃朵笉璁$畻姣忎釜椤圭洰鐨勫€硷紝浠呭湪璇锋眰鏃朵骇鐢熶笅涓€涓€笺€傝繖闈炲父鏈夌敤锛岀壒鍒槸瀵逛簬澶у瀷鏁版嵁闆嗘垨鍏锋湁鏃犻檺鍏冪礌鐨勫簭鍒椼€傚彲杩唬瀵硅薄鍙凯浠e璞℃槸涓€绉嶆暟鎹粨鏋勶紝鍏跺厓绱犳棬鍦ㄥ叕寮€璁块棶銆侸S涓緢澶氬璞¢兘鏄彲杩唬鐨勶紝鍙兘涓嶅お濂界悊瑙o紝浣嗘槸浠旂粏瑙傚療灏变細鍙戠幇杩唬鐨勭壒鐐癸細newMap([iterable])newWeakMap([iterable])newSet([iterable]])newWeakSet([iterable])Promise.all([iterable])Promise.race([iterable])Array.from([iterable])杩橀渶瑕佷竴涓彲杩唬瀵硅薄锛屽惁鍒欎細鎶涘嚭绫诲瀷閿欒锛宔g:for...of...(灞曞紑杩愮畻绗?const[a,b,..]=iterable(瑙f瀯璧嬪€?yield*(generator)JavaScript涓凡缁忔湁寰堝鍐呯疆鐨勫彲杩唬瀵硅薄锛歋tring,Array,TypedArray,Map,Set銆傝凯浠e崗璁凯浠e櫒鍜屽彲杩唬瀵硅薄閬靛惊杩唬鍗忚銆傚崗璁槸涓€缁勬帴鍙e苟鎸囧畾濡備綍浣跨敤瀹冧滑銆侷terator閬靛惊Iterator鍗忚锛孖terable閬靛惊Iterable鍗忚銆傚彲杩唬鍗忚涓€涓璞¤鎴愪负鍙凯浠g殑锛屽畠蹇呴』閫氳繃Symbol.iterator瀹炵幇涓€涓凯浠e櫒鏂规硶锛屽畠鏄凯浠e櫒鐨勫伐鍘傘€備娇鐢═ypeScript锛孖terable鍗忚鐪嬭捣鏉ュ儚杩欐牱锛歩nterfaceIterable{[Symbol.iterator]():Iterator;}Symbol.iterator]()鏄竴涓棤鍙傛暟鍑芥暟銆傚湪鍙凯浠e璞′笂璋冪敤瀹冩剰鍛崇潃鎴戜滑鍙互閫氳繃this璁块棶鍙凯浠e璞★紝瀹冨彲浠ユ槸甯歌鍑芥暟鎴栫敓鎴愬櫒鍑芥暟銆傝凯浠e櫒鍗忚杩唬鍣ㄥ崗璁畾涔変簡鐢熸垚鍊煎簭鍒楃殑鏍囧噯鏂规硶銆備负浜嗕娇瀵硅薄鎴愪负杩唬鍣紝瀹冨繀椤诲疄鐜皀ext()鏂规硶銆傝凯浠e櫒鍙互瀹炵幇return()鏂规硶锛屾垜浠皢鍦ㄦ湰鏂囧悗闈㈣璁恒€備娇鐢═ypeScript锛岃凯浠e櫒鍗忚濡備笅鎵€绀猴細interfaceIterator{next():IteratorResult;return?(value?:any):IteratorResult;}IteratorResult瀹氫箟濡備笅锛歩nterfaceIteratorResult{value?:any;done:boolean;}done閫氱煡娑堣垂鑰呰凯浠e櫒鏄惁宸茬粡琚娇鐢紝false琛ㄧず杩樻湁鍊奸渶瑕佺敓鎴愶紝true琛ㄧず杩唬鍣ㄥ凡缁忕粨鏉熴€倂alue鍙互鏄换浣旿S鍊硷紝瀹冩槸鏄剧ず缁欐秷璐硅€呯殑鍊笺€傚綋done涓虹湡鏃讹紝鍙互鐪佺暐鍊笺€侰ombinediterators鍜宨terableobjects鍙互鐢ㄤ笅鍥炬潵琛ㄧず锛氭渚嬬殑鍩虹鐭ヨ瘑浠嬬粛瀹屼簡锛屾帴涓嬫潵鎴戜滑閫氳繃涓€浜涙渚嬫潵娣卞寲鎴戜滑鐨勫舰璞°€傝寖鍥磋凯浠e櫒璁╂垜浠粠涓€涓潪甯稿熀鏈殑杩唬鍣ㄥ紑濮嬶紝createRangeIterator杩唬鍣ㄣ€傛垜浠墜鍔ㄨ皟鐢╥t.next()鏉ヨ幏鍙栦笅涓€涓狪teratorResult銆傛渶鍚庝竴娆¤皟鐢ㄨ繑鍥瀧done:true}锛岃繖鎰忓懗鐫€鐜板湪浣跨敤杩唬鍣ㄥ苟涓斾笉鍐嶄骇鐢熶换浣曞€笺€傚嚱鏁癱reateRangeIterator(from,to){leti=from;return{next(){if(i<=to){return{value:i++,done:false};}else{return{done:true};}}}}constit=createRangeIterator(1,3);console.log(it.next());console.log(it.next());console.log(it.next());console.log(瀹?next());IterableRangeIterators鍦ㄦ湰鏂囧墠闈紝鎴戞彁鍒癑S涓殑鏌愪簺璇彞闇€瑕佷竴涓彲杩唬瀵硅薄銆傚洜姝わ紝鎴戜滑鍓嶉潰鐨勭ず渚嬪湪涓巉or...of寰幆涓€璧蜂娇鐢ㄦ椂灏嗕笉璧蜂綔鐢ㄣ€備絾鏄垱寤虹鍚堣凯浠e櫒鍜屽彲杩唬鍗忚鐨勫璞¢潪甯稿鏄撱€俧unctioncreateRangeIterator(from,to){leti=fromreturn{[Symbol.杩唬鍣╙(){returnthis},next(){if(i<=to){return{value:i++,done:false}}else{return{done:true}}}}}constit=createRangeIterator(1,3)for(constiofit){console.log(i)}InfiniteSequenceIterator杩唬鍣ㄥ彲浠ヨ〃绀烘棤闄愬ぇ灏忕殑搴忓垪锛屽洜涓哄畠浠彧鍦ㄩ渶瑕佺殑鏃跺€欒绠楀€笺€傛敞鎰忎笉瑕佸湪鏃犻檺杩唬鍣ㄤ笂浣跨敤鎵╁睍杩愮畻绗?...)锛孞S浼氬皾璇曟秷鑰楄凯浠e櫒锛岃繖姘歌繙涓嶄細缁撴潫锛屽洜涓鸿凯浠e櫒鏄棤闄愮殑銆傛墍浠ヤ綘鐨刟pp浼氬穿婧冿紝鍥犱负鍐呭瓨宸茬粡鑰楀敖浜嗮煒卞彟澶栵紝for...of寰幆涔熸槸涓€鏍风殑锛屾墍浠ョ‘淇濅綘鍙互閫€鍑哄惊鐜細functioncreateEvenNumbersIterator(){letvalue=0return{[Symbol.iterator](){returnthis},next(){value+=2return{value,done:false}}}}constit=createEvenNumbersIterator()const[a,b,c]=itconsole.log({a,b,c})const[x,y,z]=itconsole.log({x,y,z})for(constevenofit){console.log(even)if(even>20){break}}鍏抽棴杩唬鍣ㄦ濡傛垜浠箣鍓嶆彁鍒扮殑锛岃凯浠e櫒鍙互閫夋嫨浣跨敤return()鏂规硶銆傚綋杩唬鍣ㄦ病鏈夎凯浠e埌鏈€鍚庢椂浣跨敤杩欎釜鏂规硶锛岃杩唬鍣ㄦ竻鐞嗐€俧or...of寰幆鍙互鎻愬墠缁堟杩唬锛歜reakcontinuethrowreturnfunctioncreateCloseableIterator(){letidx=0constdata=['a','b','c','d','e']functioncleanup(){console.log('鎵ц娓呯悊')}return{[Symbol.iterator](){returnthis},next(){if(idx<=data.length-1){return{value:data[idx++],done:false}}else{cleanup()return{done:true}}},return(){cleanup()return{done:true}}}}constit=createCloseableIterator()for(constvalueofit){console.log(value)if(value==='c'){break}}console.log('\n--------\n')const_it=createCloseableIterator();for(constvalueof_it){console.log(value);}濡傛灉鐭ラ亾杩唬鍣ㄥ凡缁忕粨鏉燂紝閭d箞鎵嬪姩璋冪敤cleanup()鍑芥暟銆傚鏋滅獊鐒跺畬鎴愶紝return()浼氫负鎴戜滑宸ヤ綔骞舵竻鐞嗐€傪煉ラ澶栧唴瀹瑰鏋滀綘宸茬粡鍋氬埌浜嗚繖涓€姝ワ紝璁╂垜浠潵鐪嬬湅涓€浜涢澶栫殑鍐呭銆傜粍鍚堝櫒缁勫悎鍣ㄦ槸缁勫悎鐜版湁鍙凯浠e璞′互鍒涘缓鏂板彲杩唬瀵硅薄鐨勫嚱鏁般€傚洜姝わ紝鎴戜滑鑳藉鍒涘缓璁稿鏁堢敤鍑芥暟銆傚湴鍥炬垨杩囨护鍣ㄥ憿锛熺湅鐪嬩笅闈㈢殑浠g爜锛岃姳鐐规椂闂寸悊瑙e畠銆傚嚱鏁癱reateEvenNumbersIterator(){璁╁€?0;return{[Symbol.iterator](){杩斿洖杩欎釜锛泒,next(){鍊?=2;杩斿洖{鍊硷紝瀹屾垚锛氬亣}锛泒}}functionmap(fn,iterable){constiter=iterable[Symbol.iterator]();return{[Symbol.iterator](){杩斿洖杩欎釜锛泒,next(){constn=iter.next();濡傛灉锛堬紒n.done锛墈杩斿洖{鍊硷細fn锛坣.value锛夛紝瀹屾垚锛歠alse};}else{return{done:true};}}}}functionfilter(fn,iterable){constiter=iterable[Symbol.iterator]();return{[Symbol.iterator](){杩斿洖杩欎釜锛泒,next(){constn=iter.next();if(!n.done){if(fn(n.value)){return{value:n.value,done:false};}else{returnthis.next();}}else{return{done:true};}}}}functiontake(n,iterable){constiter=iterable[Symbol.iterator]();杩斿洖{[绗﹀彿ol.iterator](){杩斿洖杩欎釜锛泒,next(){濡傛灉(n>0){n--;杩斿洖iter.next();}else{return{done:true};}}}}functioncycle(iterable){constiter=iterable[Symbol.iterator]();甯搁噺淇濆瓨=[];璁﹊dx=0;return{[Symbol.iterator](){杩斿洖杩欎釜锛泒,next(){constn=iter.next();if(!n.done){saved[idx++]=n.value;杩斿洖{鍊硷細n.value锛屽畬鎴愶細鍋噠锛泒else{return{value:saved[idx++%saved.length],done:false};}}}}functioncollect(iterable){//浣跨敤杩唬鍣╮eturnArray.from(iterable);}constevenNumbersIterator=createEvenNumbersIterator();constresult=collect(//7.骞舵敹闆嗙粨鏋渇ilter(//猬嗭笍6.鍙繚鐣欏ぇ浜?鐨勫€紇al=>val>1,map(//猬嗭笍5.灏嗚幏寰楃殑鍊奸櫎浠?val=>val/2,take(//猬嗭笍4.鍙彇鍏朵腑鍏釜6,cycle(//猬嗭笍3.浣垮畠浠棤闄愬惊鐜簭鍒梩ake(//猬嗭笍2.鍙彇鍏朵腑涓変釜3,evenNumbersIterator//猬嗭笍1.鏃犻檺鍋舵暟搴忓垪))))));鎺у埗鍙版棩蹇楋紙缁撴灉锛夛紱杩欐槸涓€澶у爢浠g爜锛屽緢蹇垜浠氨浼氱湅鍒板浣曚娇鐢ㄧ敓鎴愬櫒鍜屽嚱鏁板紡缂栫▼姒傚康閲嶆瀯鎵€鏈夎繖浜涳紝鏁鏈熷緟锛屽苟鐣欐剰鎴戠殑鍚庣画鏂囩珷锛屾垜浠繕鏈夊緢澶氬唴瀹硅璁层€備氦娴佹湁姊︽兂锛屾湁骞茶揣锛屽井淇℃悳绱€愬ぇ鍗冧笘鐣屻€戝叧娉ㄨ繖浣嶅噷鏅ㄨ繕鍦ㄦ礂纰楃殑娲楃鏅鸿€呫€傛湰鏂囧凡鏀跺綍鍒癎itHubhttps://github.com/qq449245884/xiaozhi锛岄噷闈㈡湁瀹屾暣鐨勬祴璇曠珯鐐广€佽祫鏂欏拰鎴戠殑涓€绾垮巶鍟嗚璋堢郴鍒楁枃绔犮€傜紪杈戣繃绋嬩腑鍙兘瀛樺湪鐨凚UG鏃犳硶瀹炴椂鑾风煡銆備箣鍚庝负浜嗚В鍐宠繖浜沚ug锛岃姳璐逛簡澶ч噺鐨勬椂闂村湪鏃ュ織璋冭瘯涓娿€傞『渚挎帹鑽愪竴涓ソ鐢ㄧ殑BUG鐩戞帶宸ュ叿Fundebug銆備綔鑰咃細MelkorNemesis璇戣€咃細鍓嶇灏忔櫤鏉ユ簮锛歮edium鍘熸枃锛歨ttps://medium.com/@MelrNemes...
