Hướng dẫn tạo JavaScript

Trình tạo là một loại chức năng đặc biệt với khả năng tự tạm dừng và tiếp tục sau đó, cho phép các mã khác chạy trong thời gian chờ đợi.

Trình tạo là một loại chức năng đặc biệt với khả năng tự tạm dừng và tiếp tục sau đó, cho phép các mã khác chạy trong thời gian chờ đợi.

Mã quyết định rằng nó phải đợi, vì vậy nó cho phép mã khác “trong hàng đợi” chạy và giữ quyền tiếp tục hoạt động của nó “khi điều nó đang chờ” được thực hiện xong.

Tất cả điều này được thực hiện với một từ khóa đơn giản:yield. Khi một trình tạo chứa từ khóa đó, việc thực thi sẽ bị tạm dừng.

Một máy phát điện có thể chứa nhiềuyieldtừ khóa, do đó sẽ tự dừng nhiều lần và nó được xác định bởi*functiontừ khóa này không bị nhầm lẫn với toán tử tham chiếu con trỏ được sử dụng trong các ngôn ngữ lập trình cấp thấp hơn như C, C ++ hoặc Go.

Trình tạo cho phép các mô hình lập trình hoàn toàn mới trong JavaScript, cho phép:

  • Giao tiếp 2 chiều khi máy phát điện đang chạy
  • tồn tại lâu dài trong khivòng lặpkhông đóng băng chương trình của bạn

Đây là một ví dụ về máy phát điện giải thích cách hoạt động của tất cả nó.

function *calculator(input) {
    var doubleThat = 2 * (yield (input / 2))
    var another = yield (doubleThat)
    return (input * doubleThat * another)
}

Chúng tôi khởi tạo nó bằng

const calc = calculator(10)

Sau đó, chúng tôi khởi động trình lặp trên trình tạo của chúng tôi:

calc.next()

Lần lặp đầu tiên này bắt đầu trình lặp. Mã trả về đối tượng này:

{
  done: false
  value: 5
}

Điều gì xảy ra là: mã chạy hàm, vớiinput = 10vì nó đã được chuyển trong hàm tạo của trình tạo. Nó chạy cho đến khi nó đạt đếnyieldvà trả về nội dung củayield:input / 2 = 5. Vì vậy, chúng tôi nhận được giá trị là 5 và dấu hiệu rằng quá trình lặp chưa được thực hiện (chức năng chỉ bị tạm dừng).

Trong lần lặp thứ hai, chúng tôi chuyển giá trị7:

calc.next(7)

và những gì chúng tôi nhận lại là:

{
  done: false
  value: 14
}

7được đặt dưới dạng giá trị củadoubleThat. Quan trọng: bạn có thể đọc nhưinput / 2là đối số, nhưng đó chỉ là giá trị trả về của lần lặp đầu tiên. Bây giờ chúng ta bỏ qua điều đó và sử dụng giá trị đầu vào mới,7, and multiply it by 2.

Sau đó, chúng tôi đạt được lợi nhuận thứ hai và điều đó trở lạidoubleThat, vì vậy giá trị trả về là14.

In the next, and last, iteration, we pass in 100

calc.next(100)

và đổi lại chúng tôi có

{
  done: true
  value: 14000
}

Khi quá trình lặp lại được thực hiện (không tìm thấy thêm từ khóa lợi nhuận nào nữa) và chúng tôi chỉ quay lại(input * doubleThat * another)bao nhiêu10 * 14 * 100.

Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript


Các hướng dẫn js khác: