</>
⌕
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/Set constructor đề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ợp take(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...of dùng cho stream và phân trang.
🃏 Ôn bằng flashcard