實現(xiàn)了__iterator__()方法豌蟋,這個方法返回一個迭代器對象,迭代器對象要求實現(xiàn)next()方法,當(dāng)next完結(jié)時地淀,發(fā)拋出StopIteration異常,那么就可以用在for/in結(jié)構(gòu)中岖是,for/in循環(huán)自行處理Iterator()函數(shù)的調(diào)用及異常的處理帮毁。當(dāng)然实苞,也可以手動調(diào)用Iterator()函數(shù)來自行進(jìn)行處理。
當(dāng)對象沒有實現(xiàn)__iterator__()方法時烈疚,Iterator()函數(shù)返回一個內(nèi)部實現(xiàn)的迭代器對象黔牵,這個迭代器能夠?qū)ψ陨淼膶傩赃M(jìn)行迭代。
Javascript還引入了yield(關(guān)鍵字)爷肝,使用yield的函數(shù)稱為生成器函數(shù)猾浦,生成器函數(shù)通過yield返回值(所以也規(guī)定了它不能夠通過return返回值,這也是其特殊之處)灯抛。按照語法規(guī)定金赦,生成器函數(shù)的調(diào)用,返回的是一個生成器对嚼,生成器對象的next()方法返回yield出來的值夹抗,并且下次調(diào)用能夠恢復(fù)生成器函數(shù)的執(zhí)行,直到函數(shù)再次yield纵竖。