نريد أن نتيح هذا المشروع المفتوح المصدر إلى كل الناس حول العالم. من فضلك ساعدنا على ترجمة محتوى هذه السلسله للغة التى تعرفها.
الرجوع الي الدرس

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

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

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

  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.

close