Senior #generator#iterator#symbol#lazy
Iterator protocol và generator hoạt động thế nào? Dùng khi nào?
⚡ Trả lời nhanh
Iterable có method `[Symbol.iterator]()` trả về iterator với `next()` cho `{ value, done }`. Generator (`function*`) tạo iterator có thể tạm dừng ở `yield` và nhận giá trị qua `next(x)`, cho phép lazy evaluation, chuỗi vô hạn và luồng điều khiển hai chiều.
Ví dụ
main.js · sửa được
for...of, spread, destructuring,Array.from,Map/Setconstructor đều dùng iterator protocol.- Generator lazy: chỉ tính giá trị khi được yêu cầu, nên biểu diễn được chuỗi vô hạn (
while (true) yield ...) kết hợptake(n). yield*ủy quyền sang iterable khác;return()/throw()cho phép đóng/ném lỗi vào generator.async function*+for await...ofdùng cho stream và phân trang.