حلقه چه مقادیری نشان میدهد؟
در هر بار گردش حلقه، حدس بزنید خروجی چه عددی است و با جواب مسئله مقایسه کنید.
هر دو حلقه، مقادیر یکسانی را 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)اشتباه می شود.