ค้นหาเว็บไซต์

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 แต่โดยทั่วไปมันไม่ง่ายขนาดนั้น