Tôi cũng có câu hỏi tương tự và đến đây. Sau khi đọc các bài đăng và bình luận, tôi cảm thấy việc sử dụng trình tạo trong một hàm mũi tên dường như rất mơ hồ:
const generator = () => 2*3; // * implies multiplication
// so, this would be a confusing
const generator = () =>* something; // err, multiplying?
const generator = () =*> ... // err, ^^
const generator = ()*=> ... // err, *=3, still multiplying?
const generator=*()=> ... // err, ^^
const generator = *param => ... //err, "param" is not fixed word
Đây là lý do lớn có thể khiến họ không triển khai trình tạo liên quan đến chức năng mũi tên.
Nhưng, nếu tôi là một trong số họ, tôi có thể nghĩ như thế này:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
Cảm giác này giống như chúng ta có chức năng không đồng bộ:
const asyncFunction = async () => ... // pretty cool
Bởi vì, với chức năng bình thường, từ khóa async tồn tại, do đó, hàm mũi tên đang sử dụng nó - async () =>
dường như có vẻ async function()
.
Nhưng, không có từ khóa như gen
hoặc generator
và chức năng mũi tên than ôi không sử dụng nó.
Để kết luận:
Ngay cả khi họ muốn triển khai trình tạo trong hàm mũi tên, tôi nghĩ họ cần suy nghĩ lại về cú pháp của trình tạo trong lõi js:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
Và đây sẽ là một sai lầm lớn. Vì vậy, giữ chức năng mũi tên ra khỏi máy phát điện, là khá mát mẻ.
Sau bình luận @Bergi :
Không. Các hàm mũi tên được cho là có trọng lượng nhẹ (và không có .prototype chẳng hạn) và thường là một lớp, trong khi các máy phát điện thì hoàn toàn ngược lại.
Tôi sẽ nói rằng mục đích của trình tạo để sử dụng là run-stop-run và vì vậy tôi không nghĩ rằng chúng ta cần quan tâm đến nguyên mẫu, từ vựng này, v.v.
function*
lệnh (từ khóa hàm theo sau dấu hoa thị) xác định hàm tạo."