นี่คือสิ่งที่ฉันมักจะเขียนสำหรับลูป
สำหรับ (var i = 0; i <20; i ++) {.... }แต่ฉันคิดว่าบางคนเขียนสิ่งนี้
สำหรับ (var i = 0; i <20; ++ i) {.. }สิ่งนี้จะมีผลกระทบอะไรต่อการวนรอบ?
1. ดูเหมือนว่าไม่มีความแตกต่างสำหรับ ...
แต่เมื่อใช้ในการมอบหมายมีความแตกต่าง ...
var a = 1; var b = a ++; var c = 1; var d = ++ c; console.log (b, d); // 1, 2
A ++ คือการใช้ครั้งแรกจากนั้นเพิ่มด้วยตัวคุณเอง
++ a คือการเพิ่มก่อนจากนั้นใช้ไฟล์
2. มันอาจเป็นนิสัยที่นำโดยยุค C/C ++ ตำนานเล่าว่า ++ ฉันเร็วกว่า i ++ แต่อันที่จริงประสิทธิภาพของทั้งสองนี้คล้ายกันใน JS
สำหรับรายละเอียดเฉพาะข้อมูลจำเพาะจะเขียนดังนี้:
สำหรับสถานการณ์ด้านหน้า -
UnaryExpression: ++ unaryexpressionlet expr เป็นผลมาจากการประเมิน unaryexpression.let oldValue เป็น tonumber (getValue (expr)). returnifabrupt (oldValue). let newValue เป็นผลมาจากการเพิ่มค่า 1 ไปยัง oldValue ifabrupt (สถานะ). กลับมาใหม่ใหม่
การแปลคร่าวๆ:
1. ให้ Expr เท่ากับผลลัพธ์ของนิพจน์ปัจจุบัน (นั่นคือส่วนหลัง ++)
2. ให้ OldValue เท่ากับผลลัพธ์ของการแปลงเป็นตัวเลข
3. ใช้กฎเดียวกันกับตัวดำเนินการ " +" ให้ newValue = oldValue + 1
4. กำหนด NewValue ให้กับ Expr
5. การดำเนินการทั้งหมดส่งคืน NewValue
สำหรับสถานการณ์เบื้องหลัง -
PostfixExpression: LefthandsideExpression ++
1. LHS เป็นผลมาจากการประเมิน LefthandsideExpression
2. เล็ต oldvalue เป็น tonumber (getValue (LHS))
3. returnifabrupt (oldValue)
4.let newValue เป็นผลมาจากการเพิ่มค่า 1 ถึง OldValue โดยใช้กฎเดียวกับตัวดำเนินการ + (ดู 12.7.5)
5. สถานะของเล็ตเป็น putvalue (LHS, newValue)
6. returnifabrupt (สถานะ)
7. กลับ OldValue
การแปลคร่าวๆ -
1. ให้ LHS เท่ากับผลลัพธ์ของนิพจน์ปัจจุบัน (ส่วนก่อนหน้าของ ++)
2. ให้ OldValue เท่ากับ LHS เพื่อแปลงผลลัพธ์ของจำนวน
3. ใช้กฎเดียวกันกับตัวดำเนินการ " +" ให้ newValue = oldValue + 1
4. กำหนด NewValue ให้ LHS
5. การดำเนินการทั้งหมดส่งคืน OldValue
จะเห็นได้ว่าความแตกต่างระหว่างทั้งสองเป็นเพียงขั้นตอนสุดท้าย ไม่ว่าการดำเนินการทั้งหมดจะกลับมาหลังจากเพิ่มหนึ่งหรือก่อนเพิ่ม
สำหรับคำสั่งสำหรับ:
สำหรับ (var i = 0; i <n; i ++)
คอลัมน์สุดท้ายนั้นเพิ่มขึ้นด้วยตนเองและไม่ได้กำหนดค่านี้ให้กับทุกคนดังนั้นจากมุมมองนี้มันจะเหมือนกันสำหรับสัญลักษณ์ ++ ที่จะวางไว้ด้านหน้าหรือหลัง
3. อันที่จริงมีความแตกต่างไม่มากนัก แต่ถ้าคุณต้องการติดตามประสิทธิภาพเล็กน้อย ++ ฉันจะมีประสิทธิภาพมากขึ้น
มันมาจากไลบรารีมาตรฐาน STD ของ C ++ เมื่อฉันเป็นตัววนซ้ำของคอนเทนเนอร์ STD ฉันไม่ใช่ตัวเลข I ++ จะสร้างการทำงานที่ได้รับมอบหมายเพิ่มเติมดังนั้น ++ ฉันมีประสิทธิภาพสูงกว่า ดังนั้นคนที่เคยชินกับ C ++ ต้องการใช้ ++ ฉันเพื่อประหยัดเงินเมื่อฉันไม่ใช่ค่าตัวเลข
ข้างต้นคือความแตกต่างระหว่าง I ++ และ ++ I ใน JS สำหรับลูปแนะนำให้คุณรู้จักโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!