الرجوع الي الدرس

ما القيم التي ستعرضها الحلقة ؟

في كل تكرار قم بكتابة القيمة التي سيتم عرضها وقارن إجابتك مع الحل.

هل تقوم كلتا الحلقتين بعرض نفس القيم أم لا ؟

  1. صيغة prefix ++i:

    let i = 0;
    while (++i < 5) alert( i );
  2. صيغة postfix i++

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

السؤال يوضح كيف يمكن للصيغ postfix/prefix أن تؤدي إلى نتائج مختلفة عندما تستخدم للمقارنة.

  1. من 1 إلى 4

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

    أول قيمة هي i = 1 لأن ++i أولًا تزيد i ثم تقوم بإرجاع القيمة الجديدة. لذلك فإن أول عملية مقارنة هي 1 < 5 ويقوم alert بعرض 1.

    ثم يتبع ب 2, 3, 4… – واحدًا بعد الآخر. المقارنة دائما تستخدم القيمة بعد الزيادة لأن ++ قبل المتغير.

    أخيرًا i = 4تزيد إلى 5 والمقارنة while(5 < 5) تفشل وتتوقف الحلقة. لذلك لا يتم عرض 5 .

  2. من 1 إلى 5

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

    أول قيمة هي i = 1. صيغة postfix i++ تزيد i وترجع القيمة القديمة ولذلك تكون المقارنة i++ < 5 تستخدم i = 0 (على العكس من ++i < 5).

    ولكن استدعاء alert منفصل. فهو ينفذ بعد الزيادة والمقارنة. لذلك يحصل على القيمة الحالية i = 1.

    ثم يتبعه 2, 3, 4…

    لنتوقف عند i = 4. صيغة prefix ++i تزيدها وتستخدم 5 في المقارنة. لكن postfix i++ تزيد i إلى 5وترجع القيمة القديمة. فتكون المقارنة while(4 < 5) – true وينفذ alert.

    قيمة i = 5 هي آخر قيمة لأن في الخطوة التالية while(5 < 5) تكون false.