javascript - ทำไม `for...of` ใน Typescript จึงคัดลอกวัตถุ iterable ก่อนการวนซ้ำ?
ตัวอย่างเช่น:
const aKeys = [];
for (let key of aKeys) {
...
}
ถูกแปลงเป็น:
var aKeys = [];
for (var _i = 0, aKeys_1 = aKeys; _i < aKeys_1.length; _i++) {
var key = aKeys_1[_i];
}
จุดประสงค์ของ aKeys_1 ที่นี่คืออะไร?
คุณสามารถดูสิ่งนี้แบบสด ๆ ใน Typescript playground ได้ที่นี่เช่นกัน
คำตอบ #1
เพราะคุณสามารถกำหนดค่า aKeys ใหม่ในเนื้อหาของลูปได้ และมันไม่ควรส่งผลต่อการวนซ้ำ แน่นอนว่ามันไม่จำเป็นเมื่อคุณ ไม่ ทำ แต่ตัวแปลงโค้ดไม่สามารถรู้แน่ชัดได้
และโดยทั่วไป ตามที่ @Thomas สังเกตในคอมเมนต์ นิพจน์นั้นต้องถูกประเมินเพียงครั้งเดียว — แม้ว่าจะเห็นได้ชัดว่ามันจะไม่ส่งผลต่อการอ้างอิงถึงตัวแปร const แต่โดยทั่วไปมันไม่ง่ายขนาดนั้น