Avatar ·

ما الفرق بين call و apply في JavaScript؟ متى نستخدم كل منهما؟

مرحبًا بالجميع! بدأت في تعلم JavaScript ووجدت الطريقتين call و apply. أفهم أن كلتيهما تسمحان باستدعاء دالة مع سياق محدد (قيمة this)، لكنني لا أستطيع فهم الفرق الجوهري بينهما. لنفترض أن لدي كائنًا بسيطًا ودالة: ```javascript const person = { firstName: 'إيفان', lastName: 'بيتروف' }; function greet(greeting, punctuation) { console.log(`${greeting}, ${this.firstName} ${this.lastName}${punctuation}`); } ``` يمكنني استدعاء هذه الدالة باستخدام call: ```javascript greet.call(person, 'مرحبًا', '!'); // مرحبًا, إيفان بيتروف! ``` وباستخدام apply: ```javascript greet.apply(person, ['مرحبًا', '!']); // مرحبًا, إيفان بيتروف! ``` النتيجة متطابقة. قرأت أن الفرق هو في كيفية تمرير الوسائط: call — مفصولة بفواصل، apply — كمصفوفة. لكن هل هذا مجرد سكر نحوي؟ أم هناك سيناريوهات عملية حيث يكون apply لا غنى عنه؟ على سبيل المثال، سمعت عن "faking" دوال المصفوفات أو العمل معها.