Tôi vấp vào generator functions on MDN và những gì tôi bối rối là ví dụ sau:Tại sao tuyên bố lợi nhuận của một hàm trình tạo javascript trả về các tham số của .next()?
function* logGenerator() {
console.log(yield);
console.log(yield);
console.log(yield);
}
var gen = logGenerator();
// the first call of next executes from the start of the function
// until the first yield statement
gen.next();
gen.next('pretzel'); // pretzel
gen.next('california'); // california
gen.next('mayonnaise'); // mayonnaise
Những gì tôi không hiểu là tại sao báo cáo kết quả yield
đó là lập luận của console.log
trả về tham số truyền cho phương thức .next()
của máy phát điện . Điều này có xảy ra do một số trống rỗng yield
phải trả lại giá trị của tham số đầu tiên của phương thức .next()
?
Tôi cũng đã thử một số ví dụ khác, mà dường như để xác nhận tuyên bố trên như:
gen.next(1,2,3); // the printed value is 1, the 2 and 3 are ignored
// and the actual yielded value is undefined
Ngoài ra là có một cách để truy cập vào các thông số hơn nữa của phương pháp .next()
bên trong cơ thể của hàm máy phát điện?
Một điều khác tôi nhận thấy là, trong khi tuyên bố lợi nhuận trả về các giá trị này cho console.log
chúng thực sự không được tạo ra như đầu ra của trình tạo. Tôi phải nói rằng tôi thấy nó rất khó hiểu.
... bởi vì đó là điều đáng lẽ phải xảy ra? Tại sao điều này làm bạn bối rối? – user2357112
Đó chỉ là những gì biểu thức 'yield' đánh giá. – user2357112
@ user2357112 nó gây nhầm lẫn cho tôi vì tôi không thấy thông số được tham chiếu trong mã ở trên. Có đọc các liên kết từ các câu trả lời nó tất cả có ý nghĩa bây giờ, nhưng khi tôi lần đầu tiên nhìn thấy nó, tôi đã không hiểu nó. Một lưu ý phụ, bạn cũng có thể làm những việc như 'function * x() {yield yield yield;}' – Jakub