มันเป็นเครื่องปั่นไฟฟังก์ชั่น
เครื่องกำเนิดไฟฟ้าเป็นฟังก์ชั่นที่สามารถออกและเข้ามาใหม่ได้ในภายหลัง บริบทของพวกเขา (การผูกตัวแปร) จะถูกบันทึกไว้ในการเข้า - ออกใหม่
การเรียกฟังก์ชันตัวสร้างไม่ได้เรียกใช้งานตัวมันทันที วัตถุตัววนซ้ำสำหรับฟังก์ชันจะถูกส่งคืนแทน เมื่อมีnext()
การเรียกใช้เมธอดiterator ฟังก์ชันของตัวกำเนิดจะถูกดำเนินการจนกระทั่งyield
นิพจน์แรกซึ่งระบุค่าที่จะส่งคืนจากตัววนซ้ำหรือด้วยyield*
ตัวแทนจะไปยังฟังก์ชันตัวสร้างอื่น
บันทึกประวัติศาสตร์:
EcmaScript.next
มันเป็นไวยากรณ์ที่เสนอ
เดฟเฮอร์แมนของ Mozilla ให้พูดคุยเกี่ยวกับEcmaScript.next เวลา30:15 น.เขาพูดเกี่ยวกับเครื่องกำเนิดไฟฟ้า
ก่อนหน้านี้เขาอธิบายว่า Mozilla ได้ทดลองใช้การเปลี่ยนแปลงภาษาที่เสนอเพื่อช่วยคัดท้ายคณะกรรมการอย่างไร Dave ทำงานใกล้ชิดกับ Brendan Eich, CTO ของ Mozilla (ฉันคิดว่า) และผู้ออกแบบจาวาสคริปต์ดั้งเดิม
คุณสามารถค้นหารายละเอียดเพิ่มเติมเกี่ยวกับวิกิ EcmaScript ที่ทำงานในกลุ่ม: http://wiki.ecmascript.org/doku.php?id=harmony:generators
คณะทำงาน (TC-39) มีข้อตกลงทั่วไปที่ EcmaScript.next ควรมีข้อเสนอของตัวสร้างตัววนซ้ำบางส่วน แต่นี่ไม่ใช่ขั้นสุดท้าย
คุณไม่ควรพึ่งพาการแสดงนี้โดยไม่มีการเปลี่ยนแปลงในภาษาเวอร์ชันถัดไปและแม้ว่ามันจะไม่เปลี่ยนแปลง แต่ก็อาจจะไม่ปรากฏในเบราว์เซอร์อื่น ๆ สักพัก
ภาพรวม
coroutines ชั้นหนึ่งแสดงเป็นวัตถุที่ห่อหุ้มบริบทการดำเนินการระงับ (เช่นการเปิดใช้งานฟังก์ชั่น) ศิลปะก่อนหน้า: Python, ไอคอน, Lua, Scheme, Smalltalk
ตัวอย่าง
ลำดับ "ไม่มีที่สิ้นสุด" ของหมายเลขฟีโบนักชี (แม้จะมีพฤติกรรมประมาณ 2 53 ):
function* fibonacci() {
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
เครื่องกำเนิดไฟฟ้าสามารถวนซ้ำในลูป:
for (n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000)
break;
print(n);
}
เครื่องกำเนิดไฟฟ้าเป็นตัววนซ้ำ:
let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8
function*
รองรับไวยากรณ์ใน Firefox ตั้งแต่ v26: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ ...... * เวอร์ชันที่เก่ากว่าใช้ไวยากรณ์ที่แตกต่าง