ما القيم التي ستعرضها الحلقة ؟
في كل تكرار قم بكتابة القيمة التي سيتم عرضها وقارن إجابتك مع الحل.
هل تقوم كلتا الحلقتين بعرض نفس القيم أم لا ؟
-
صيغة prefix
++i:let i = 0; while (++i < 5) alert( i ); -
صيغة postfix
i++let i = 0; while (i++ < 5) alert( i );
السؤال يوضح كيف يمكن للصيغ postfix/prefix أن تؤدي إلى نتائج مختلفة عندما تستخدم للمقارنة.
-
من 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. -
من 1 إلى 5
let i = 0; while (i++ < 5) alert( i );أول قيمة هي
i = 1. صيغة postfixi++تزيدiوترجع القيمة القديمة ولذلك تكون المقارنةi++ < 5تستخدمi = 0(على العكس من++i < 5).ولكن استدعاء
alertمنفصل. فهو ينفذ بعد الزيادة والمقارنة. لذلك يحصل على القيمة الحاليةi = 1.ثم يتبعه
2, 3, 4…لنتوقف عند
i = 4. صيغة prefix++iتزيدها وتستخدم5في المقارنة. لكن postfixi++تزيدiإلى5وترجع القيمة القديمة. فتكون المقارنةwhile(4 < 5)– true وينفذalert.قيمة
i = 5هي آخر قيمة لأن في الخطوة التاليةwhile(5 < 5)تكون false.