بازگشت به درس

حلقه چه مقادیری نشان میدهد؟

اهمیت: 4

در هر بار گردش حلقه، حدس بزنید خروجی چه عددی است و با جواب مسئله مقایسه کنید.

هر دو حلقه، مقادیر یکسانی را alert میکنند یا خیر؟

  1. حالت پیشوند ++i:

    let i = 0;
    while (++i < 5) alert( i );
  2. حالت پسوند i++:

    let i = 0;
    while (i++ < 5) alert( i );

تمرین نشان می دهد که چگونه شکل های پسوند/پیشوند می توانند باعث نتایج متفاوت بشوند وقتی که در مقایسه ها استفاده می شوند.

  1. از 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 نمایش داده نمی شود.

  2. از 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) اشتباه می شود.