تعبير تعريف الدوال
الكلمة المحجوزة function
تُستخدَم لتعريف دالة داخل تعبير (expression). يمكنك أيضًا تعريف الدوال عبر التصريح عنها function declaration
أو عبر الدالة البانية Function
.
البنية العامة
var myFunction = function [name]([param1[, param2[, ..., paramN]]]) {
statements
};
name
اسم الدالة، ويمكن حذفه وحينئذٍ ستسمى الدالة بالدالة المجهولة؛ واسم الدالة لن يكون متاحًا إلا داخل الدالة نفسها (يمكن أن يستعمل لتنفيذها تعاوديًا [recursively]).
param
اسم الوسيط المُرَّر إلى الدالة، العدد الأقصى للوسائط التي يمكن تمريرها إلى الدالة يختلف حسب المحرِّك الذي يُفسِّر اللغة.
statements
التعابير البرمجية التي تُشكِّل جسم الدالة.
الوصف
تعابير تعريف الدوال تشبه كثيرًا (وتكاد تماثل) طريقة التصريح عن الدالة (function declaration
)، والفرق الرئيسي بينهما هو اسم الدالة، الذي يمكن حذفه في تعابير تعريف الدوال لإنشاء دوال مجهولة (anonymous function)؛ ويمكن أن استدعاء تعبير تعريف الدالة مباشرةً (ويسمى ذلك Immediately Invoked Function Expression اختصارًا IIFE) مما يؤدي إلى تنفيذ الدالة بعد تعريفها مباشرةً.
استدعاء الدالة قبل تعريفها
لا يمكن استدعاء الدوال المُعرَّفة عبر تعابير تعريف الدوال (function expressions) في JavaScript قبل تعريفها، وذلك على النقيض من الدوال المُصرَّح عنها (function declarations):
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function() {
console.log('bar');
};
تعابير تعريف الدالة مع تحديد اسم لها
إذا أردتَ الإشارة إلى الدالة الحالية داخل جسم الدالة، فعليك إنشاء تعبير تعريف للدالة مع اسم، وهذا الاسم محليٌ وخاصٌ بالدالة ولا يمكن استخدامه خارج مجالها، لكن الغرض منه هو تجنب استخدام الخاصية arguments.callee
:
var math = {
'factorial': function factorial(n) {
if (n <= 1)
return 1;
return n * factorial(n - 1);
}
};
المتغير الذي سيُسنَد إلى الدالة سيكون له خاصية (property) باسم name
، ولن يتغيّر الاسم لو أُعيد إسناده إلى متغيرٍ آخر، وإذا حُذِفَ اسم الدالة فستكون قيمة تلك الخاصية مساويةً لاسم المتغير، وسينطبق المثل على الدوال السهمية (التي لا تملك اسمًا خاصًا بها، لذا ستُعطى اسم المتغير الذي أُسنِدَت إليه):
var foo = function() {}
foo.name // "foo"
var foo2 = foo
foo2.name // "foo"
var bar = function baz() {}
bar.name // "baz"
أمثلة
يعُرِّف المثال الآتي دالةً مجهولةً ويُسنِدُها إلى المتغير x
، لاحظ أنَّ الدالة ستُعيد مربّع الوسيط المُمرَّر إليها:
var x = function(y) {
return y * y;
};
ومن الشائع استخدام الدوال المجهولة في معالجة الأحداث:
button.addEventListener('click', function(event) {
console.log('button is clicked!')
})
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 3rd Edition.