JavaScript: الحلقات في جافاسكريبت

آخر تحديث: 2026-10-13

الحلقات تتيح لبرنامجك تكرار كتلة من الكود. كتابة "مرحبا" 100 مرة يدويًا غبية — مع حلقة، تكتبها مرة واحدة. هذه هي قوة الحلقات.

تصريحات ذات صلة:for...of return while for

1. حلقة for

حلقة for هي الخيار الأكثر شيوعًا عندما تعرف عدد مرات التكرار:

HTML
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head><meta charset="UTF-8"><title>حلقة for</title></head>
<body>
<div id="output"></div>
<script>
for (let i = 0; i < 5; i++) {
  document.getElementById('output').textContent += i + ' ';
}
</script>
</body>
</html>

الأجزاء الثلاثة:

  1. let i = 0 — التهيئة، تُنفذ مرة واحدة
  2. i < 5 — الشرط، يُتحقق قبل كل تكرار; يستمر فقط إذا كان صحيحًا
  3. i++ — التحديث، يُنفذ بعد كل تكرار
💡 تلميح: متغيرات الحلقة تُسمى تقليديًا i. للحلقات المتداخلة، استخدم i للخارجية، j للداخلية، وk للمستوى التالي — اتفاقية عالمية للمبرمجين.

HTML
<!DOCTYPE html>
<html dir="rtl">
<body>
  <h2>إنشاء قائمة بالحلقات</h2>
  <ul id="list"></ul>
  <script>
    let fruits = ['تفاحة', 'موزة', 'برتقالة', 'عنب', 'بطيخ'];
    let html = '';
    for (let i = 0; i < fruits.length; i++) {
      html += `<li>#${i + 1}: ${fruits[i]}</li>`;
    }
    document.getElementById('list').innerHTML = html;
  </script>
</body>
</html>

2. حلقة while

while تتحقق من الشرط أولاً، ثم تُنفذ — مثالية عندما لا تعرف كم تكرارًا ستحتاج:

HTML
<script>
let count = 0;
while (count < 3) {
  count++;
}
</script>

حالات استخدام شائعة: قراءة البيانات حتى تنتهي، الانتظار حتى يصبح الشرط صحيحًا.


3. حلقة do...while

do...while تُنفذ مرة واحدة قبل التحقق من الشرط — إنها تعمل مرة واحدة على الأقل:

HTML
<script>
let input;
do {
  input = prompt('أدخل رقمًا موجبًا:');
} while (Number(input) <= 0);
</script>

الفرق عن while في جملة واحدة: while قد لا تعمل أبدًا، لكن do...while تعمل دائمًا مرة واحدة على الأقل.

▶ مثال: مقارنة جميع أنواع الحلقات الثلاثة

▶ جرّب الكود

4. حلقة for...of

for...of مصممة للتكرار عبر الكائنات القابلة للتكرار (المصفوفات، النصوص، إلخ) بأبسط بنية:

HTML
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head><meta charset="UTF-8"><title>for...of</title></head>
<body>
<div id="output"></div>
<script>
let colors = ['أحمر', 'أخضر', 'أزرق'];
let html = '';
for (let color of colors) {
  html += color + ' ';
}
document.getElementById('output').textContent = html;
</script>
</body>
</html>

على عكس for، for...of تعطيك القيمة، وليس الفهرس. إذا كنت تحتاج الفهرس، استخدم حلقة for تقليدية.

💡 تلميح: عند تكرار النصوص بـ for...of، تحصل على حرف واحد في كل مرة — حتى أحرف الإيموجي تبقى سليمة، وهو أكثر موثوقية من الوصول القائم على الفهرس.


5. break وcontinue

HTML
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head><meta charset="UTF-8"><title>break وcontinue</title></head>
<body>
<div id="output"></div>
<script>
// break: توقف عند العثور على الهدف
let breakResult = '';
for (let i = 0; i < 10; i++) {
  if (i === 5) break;
  breakResult += i + ' ';
}

// continue: تخطى الأعداد الزوجية
let continueResult = '';
for (let i = 0; i < 6; i++) {
  if (i % 2 === 0) continue;
  continueResult += i + ' ';
}

document.getElementById('output').innerHTML =
  '<strong>نتيجة break:</strong>' + breakResult + '<br>' +
  '<strong>نتيجة continue:</strong>' + continueResult;
</script>
</body>
</html>

▶ مثال: break وcontinue في العمل

▶ جرّب الكود

6. حلقات متداخلة

يمكن تعشيق الحلقات داخل حلقات أخرى — تُستخدم بشكل شائع للتعامل مع البيانات ثنائية الأبعاد (جداول، شبكات):

HTML
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head><meta charset="UTF-8"><title>حلقات متداخلة</title></head>
<body>
<div id="output"></div>
<script>
let html = '';
for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    html += `(${i}, ${j}) `;
  }
  html += '<br>';
}
document.getElementById('output').innerHTML = html;
</script>
</body>
</html>

الحلقات المتداخلة تتكاثر في التكلفة — 10 خارجية × 10 داخلية = 100 تكرار. مستويات كثيرة يمكن أن تبطئ الأمور بشكل حاد; إذا كان هناك بديل، تجنب التعشيق العميق.

▶ مثال: جدول الضرب

▶ جرّب الكود

7. فخ الحلقة اللانهائية

إذا كان شرط الحلقة دائمًا صحيحًا، سيتجمد برنامجك — هذه حلقة لانهائية:

HTML
<script>
// ⚠️ لا تفعل هذا أبدًا!
// while (true) {
//   console.log('لا أستطيع التوقف أبدًا!');
// }

// خطأ شائع: نسيان تحديث الشرط
let i = 0;
// while (i < 5) {
//   console.log(i);
//   نسيان i++، لذلك i دائمًا 0 والحلقة لا تنتهي أبدًا
// }
</script>
⚠️ ملاحظة: عند كتابة حلقات، تحقق دائمًا من أن الشرط سيصبح في النهاية خاطئًا. وإلا سيتجمد المتصفح وستضطر لإغلاق التلقائي بالقوة.



تصريحات ذات صلة:for...of return while for

❓ أسئلة شائعة

س ما الفرق بين for...of وfor...in؟
ج for...of تكرر القيم وتعمل مع المصفوفات والكائنات القابلة للتكرار; for...in تكرر المفاتيح (الفهارس) ومخصصة للكائنات. استخدم for...of للمصفوفات — for...in يمكن أن تلتقط خصائص سلسلة النمط وتحسب مشاكل غير متوقعة.
س أي حلقة لها أفضل أداء؟
ج الحلقات التقليدية for هي الأسرع; for...of أبطأ قليلاً لكنها أكثر قراءة. في معظم الحالات فرق الأداء ضئيل — أعطِ الأولوية للقراءة.
س هل break في حلقة متداخلة تخرج من جميع الحلقات أم فقط من الداخلية؟
ج فقط من الحلقة الداخلية. للخروج من حلقة خارجية، استخدم اسم: outer: for(...) { for(...) { break outer; } }. لكن الأسماء تضر القراءة — فكّر في إعادة هيكلة الدالة واستخدام return بدلاً من ذلك.

📖 ملخص

📝 تمارين

  1. استخدم حلقة for لطباعة جميع مضاعفات 3 بين 1 و100
  2. استخدم حلقات متداخلة لنمط لوحة شطرنج 8×8 (مربعات سوداء وبيضاء متناوبة) على الصفحة
  3. اكتب برنامجًا يأخذ عددًا صحيحًا موجبًا كمدخل ويُخرج المضروب (مثال: الإدخال 5 → 5×4×3×2×1 = 120)
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%