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