ما القيم التي ستعرضها الحلقة ؟
في كل تكرار قم بكتابة القيمة التي سيتم عرضها وقارن إجابتك مع الحل.
هل تقوم كلتا الحلقتين بعرض نفس القيم أم لا ؟
-
صيغة 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.