كيف تجتاز مقابلة JavaScript: أهم الأسئلة من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيف تجتاز مقابلة JavaScript: أهم الأسئلة من الألف إلى الياء

\n\n

مقابلة مطور JavaScript ليست مجرد اختبار للقواعد النحوية. يرغب أصحاب العمل في رؤية فهم عميق للغة وخصائصها والقدرة على العمل مع العمليات غير المتزامنة. في هذه المقالة، سنحلل الموضوعات الرئيسية التي ستساعدك على اجتياز المقابلة بثقة. سنتناول الأسئلة من المفاهيم الأساسية إلى الموضوعات المتقدمة في Node.js مع أمثلة كود حقيقية.

\n\n

1. الأساسيات: أنواع البيانات، hoisting ونطاقات الرؤية

\n\n

لنبدأ بالأساسيات. JavaScript هي لغة ذات كتابة ديناميكية. فهم var و let و const هو الحد الأدنى الإلزامي.

\n\n

سؤال: ما الفرق بين var و let و const؟

\n
    \n
  • var له نطاق رؤية وظيفي ويتم رفعه (hoisting) بقيمة undefined.
  • \n
  • let و const لهما نطاق رؤية كتلي ولا يتم تهيئتهما حتى الإعلان (المنطقة الميتة المؤقتة).
  • \n
  • const يمنع إعادة التعيين، لكنه لا يجعل الكائن غير قابل للتغيير.
  • \n
\n\n

مثال على hoisting:

\n
console.log(a); // undefined (hoisting)\nvar a = 5;\n\nconsole.log(b); // ReferenceError: Cannot access 'b' before initialization\nlet b = 10;
\n\n

سؤال: ما هو "الرفع" (hoisting)؟

\n

هي آلية يتم من خلالها نقل إعلانات المتغيرات والدوال إلى بداية نطاق الرؤية الخاص بها قبل تنفيذ الكود. الدوال المعلنة عبر function تُرفع بالكامل، بينما المتغيرات تُرفع فقط الإعلان وليس التهيئة.

\n\n

2. الإغلاقات والسياق (this)

\n\n

الإغلاقات هي واحدة من أقوى جوانب JavaScript. تسمح للدالة بتذكر البيئة المعجمية التي تم إنشاؤها فيها.

\n\n

سؤال: ما هو الإغلاق؟ أعط مثالاً.

\n

الإغلاق هو مزيج من دالة وبيئتها المعجمية. بمعنى آخر، الدالة الداخلية لديها إمكانية الوصول إلى متغيرات الدالة الخارجية حتى بعد انتهاء الدالة الخارجية من العمل.

\n\n
function createCounter() {\n  let count = 0;\n  return function() {\n    count++;\n    return count;\n  };\n}\n\nconst counter = createCounter();\nconsole.log(counter()); // 1\nconsole.log(counter()); // 2
\n\n

سؤال: كيف يعمل this في JavaScript؟

\n

يتم تحديد قيمة this من خلال كيفية استدعاء الدالة، وليس من خلال مكان إعلانها. القواعد الأساسية:

\n
    \n
  • في السياق العام (في المتصفح) — window، في Node.js — global.
  • \n
  • في طريقة كائن — الكائن نفسه.
  • \n
  • في دالة تم استدعاؤها عبر new — مثيل جديد.
  • \n
  • عند استخدام call أو apply أو bind — الكائن المُمرر.
  • \n
  • في دوال السهم — this مأخوذ من السياق المعجمي الخارجي.
  • \n
\n\n
const obj = {\n  name: 'Alice',\n  greet() {\n    console.log(this.name);\n  }\n};\n\nconst greet = obj.greet;\ngreet(); // undefined (فقدان السياق)\n\nconst boundGreet = obj.greet.bind(obj);\nboundGreet(); // Alice
\n\n

3. العمليات غير المتزامنة: Event Loop، البروميس و async/await

\n\n

JavaScript هي لغة ذات خيط واحد، لكنها تعالج العمليات غير المتزامنة بكفاءة بفضل Event Loop. هذا هو أحد أكثر الموضوعات شيوعًا في المقابلات.

\n\n

سؤال: ما هو Event Loop وكيف يعمل؟

\n

Event Loop هو حلقة لا نهائية تراقب مكدس الاستدعاءات (Call Stack) وطوابير المهام (Task Queue / Microtask Queue). إذا كان المكدس فارغًا، فإنه يأخذ المهمة الأولى من طابور المهام الصغيرة (Promise, MutationObserver) أو المهام الكبيرة (setTimeout, I/O).

\n\n

سؤال: ما الفرق بين المهام الصغيرة والمهام الكبيرة؟

\n
    \n
  • المهام الصغيرة: Promise.then/catch/finally،

المدونات

توصيات الكتب