حلقه چه مقادیری نشان میدهد؟
در هر بار گردش حلقه، حدس بزنید خروجی چه عددی است و با جواب مسئله مقایسه کنید.
هر دو حلقه، مقادیر یکسانی را alert
میکنند یا خیر؟
-
حالت پیشوند
++i
:let i = 0; while (++i < 5) alert( i );
-
حالت پسوند
i++
:let i = 0; while (i++ < 5) alert( i );
تمرین نشان می دهد که چگونه شکل های پسوند/پیشوند می توانند باعث نتایج متفاوت بشوند وقتی که در مقایسه ها استفاده می شوند.
-
از 1 تا 4
let i = 0; while (++i < 5) alert( i );
مقدار اول
i = 1
است، چون++i
اولi
را افزایش می دهد و سپس مقدار جدید را بر می گرداند. پس مقایسه اول5 < 1
است وalert
مقدار1
را نمایش می دهد.سپس
...4 ،3 ،2
– مقدارها یکی پس از دیگری نمایان می شوند. مقایسه همیشه از مقدار افزایش یافته استفاده می کند، چون++
قبل از متغیر است.در نهایت،
i = 4
است که به5
افزایش پیدا می کند، مقایسهwhile(5 < 5)
شکست می خورد، و حلقه متوقف می شود. بنابراین5
نمایش داده نمی شود. -
از 1 تا 5
let i = 0; while (i++ < 5) alert( i );
اولین مقدار باز هم
i = 1
است. شکل پسوندi++
i
را افزایش می دهد و سپس مقدار قدیمی را بر می گرداند، بنابراین مقایسهi++ < 5
ازi = 0
استفاده خواهد کرد (متضاد++i < 5
)اما صدا زدن
alert
جداگانه است. آن یک دستور دیگر است که بعد از افزایش و مقایسه اجرا می شود. پسi = 1
را دریافت می کند.سپس
...4 ،3 ،2
بیایید روی
i = 4
متوقف شویم. شکل پیشوند++i
آن را افزایش می دهد و از5
در مقایسه استفاده می کند. اما اینجا ما شکل پسوندi++
را داریم. پسi
را به5
افزایش می دهد، اما مقدار قدیمی را بر می گرداند. به این دلیل مقایسه در واقعwhile(4 < 5)
است – درست است، و کنترل به دستalert
می افتد.مقدار
i = 5
آخرین مقدار است، زیرا در مرحله بعدwhile(5 < 5)
اشتباه می شود.