لنعطي مثالًا أولاً. وظيفة هذه الوظيفة هي إرجاع مجموع عناصر المصفوفة
function sumArray(arr) {; مجموع فار = 0; for(var i = 0,aLength = arr.length;i < aLength;i++) { sum += arr[i]; } return sum; }
هناك مسافة بعد الكلمة الأساسية function
. sumArray
هو اسم الوظيفة. اصطلاح التسمية الخاص بها هو نفس اصطلاح أسماء المتغيرات: يمكن أن يحتوي فقط على أحرف وأرقام وشرطات سفلية وعلامات الدولار رقم ولا يمكن أن يكون كلمة رئيسية.
المعلمات الموجودة بين قوسين، والتي تسمى أيضًا المعلمات الرسمية ، تتطلب فقط اسم المعلمة. يمكن أن تكون المعلمات 0
أو 1
أو أكثر، مفصولة بـ ,
و {}
تحتوي على نص الوظيفة . يحتوي على بيان واحد أو أكثر. يتم استخدام جسم الوظيفة لتنفيذ وظيفة الوظيفة.
الكلمة الأساسية return
متبوعة بالقيمة المرجعة للدالة، وقد لا تحتوي الدالة أيضًا على قيمة إرجاع. بعد الانتهاء من تشغيل الوظيفة، ستخرج العبارة " return
من التنفيذ، ولن تعمل العبارة الموجودة أسفل return
بعد الآن. القيمة المرجعة هي مخرجات الدالة.
يمكن استدعاء الدالة المعرفة بهذه الطريقة قبل وبعد تعريف الدالة ، طالما أن الدالة والبيان الذي يستدعي الدالة موجودان في نفس الملف المصدر.
لتعريف دالة باستخدام تعبير، وهو استخدام تعبير إسناد لتعيين الدالة لمتغير . وهذا في الواقع يتعامل مع الدالة كمتغير. في هذا الوقت، يمكن أن يكون للوظيفة اسم أو لا يوجد اسم، وتسمى الوظيفة بدون اسم وظيفة مجهولة .
var funct = function getMax(a,b) { return a>b?a:b; };// لاحظ أن الفاصلة المنقوطة بعد ذلك لا يمكن أن تكون مفقودة، لأننا نحدد متغيرًا!
يختلف عن تعريفه ببيان دالة ، ولا يمكن استدعاء الدالة إلا بعد بيان تعريف الدالة وعند الاتصال، يمكن استخدام funct
اسم المتغير فقط، ولا يمكن استخدام اسم الوظيفة getMax
، مثل:
var funct = function getMax(a,b) {.
العودة أ>ب؟أ:ب؛ }; console.log(function(1,2));// إخراج 2
function
:var funct = function(a,b) { return a>b?a:b };
تم تخصيصها للمتغير funct
، لذلك تسمى دالة مجهولة. وبالمثل، لا يمكن استدعاء هذه الوظيفة إلا بعد هذا البيان.
فار وظيفة = وظيفة (أ، ب) { return a>b?a:b }; console.log(funct(1,2));//
ملخص الإخراج 2: يمكن استخدام تعريف دالة خارج الصندوق بمجرد تعريفها يمكن استخدامها في هذا البيان ثم استدعاء الوظيفة
في التدريب الرابع، قدمنا أن الكائنات يمكن أن يكون لها أساليبها الخاصة، وبالطبع هذه أيضًا وظيفة. يختلف استدعاء هذه الوظيفة قليلاً عن الوظائف المحددة في المستويين السابقين.
// تعريف الوظيفة: ابحث عن القيمة القصوى لثلاثة أرقام function max(a,b,c) { إذا (أ > ب) { إذا (أ> ج) العودة أ؛ آخر العودة ج؛ } آخر { إذا (ب > ج) العودة ب؛ آخر العودة ج؛ } } // استدعاء هذه الوظيفة var result = max(1,2,3);//النتيجة هي 3 console.log(result);// الإخراج 3
عند استدعاء الوظيفة، تحتاج إلى تمرير نفس عدد القيم المحددة مثل المعلمات الرسمية. تحتوي الوظيفة المذكورة أعلاه على 3
معلمات، لذلك عند الاتصال أدناه، قم بتمرير 3
معلمات محددة القيم، يتم تمرير 1
إلى المعلمة a
، ويتم تمرير 2
إلى المعلمة b
، 3
إلى المعلمة c
. يتم تمرير القيمة المرجعة للدالة إلى result
المتغير من خلال رمز التعيين =
. إذا لم تكن هناك كلمة أساسية return
في نص الدالة، فسيتم إرجاع undefined
.
وظائف الاتصال المحددة في الكائن:
var ob = { المعرف: 1، الحصول على ماكس: وظيفة (أ، ب) { العودة أ>ب؟أ:ب؛ } }; var result = ob.getMax(2,1);// قيمة النتيجة هي 2 var result1 = ob["getMax"](2,1);// قيمة result1 هي أيضًا 2.
الفرق من ما ورد أعلاه هو أنه لتحديد وظيفة ما، تحتاج إلى استخدام对象名.函数名
أو对象名["函数名"]
، والباقي هو نفسه.
في معظم لغات البرمجة، يتم التحقق من عدد ونوع المعلمات الفعلية التي يتم تمريرها عند استدعاء دالة، لكن JavaScript
لا تتحقق من النوع ولا عدد المعلمات الفعلية.
ستتطابق المعلمات الفعلية في JavaScript
مع المعلمات الرسمية بالترتيب من اليسار إلى اليمين ، على سبيل المثال:
function myFunction(a,b,c) { console.log(a); console.log(b); console.log
1
b
a
3
2
المعلمة الرسمية c
. عندما يكون عدد المعلمات الفعلية أقل من المعلمات الرسمية، سيتم تمرير القيمة undefined
إلى المعلمة الرسمية الصحيحة. على سبيل المثال:
الدالة myFunction(a,b,c) { console.log(a); console.log(b); console.log(c); } myFunction(1,2);
يتم تمرير المعلمة الفعلية 1
إلى المعلمة الرسمية a
، ويتم تمرير المعلمة الفعلية 2
إلى المعلمة الرسمية b
، ويتم تمرير undefined
إلى المعلمة الرسمية c
. إذا كنت تريد فقط تمرير البيانات إلى المعلمات الموجودة على اليمين، فيمكنك تمرير بيانات undefined
إلى المعلمات الفعلية القليلة الأولى. على سبيل المثال:
function myFunction(a,b,c){ console.log(a); console.log(b); console.log(c); myFunction(undef,1,2)
; صارمة بما فيه الكفاية، وأفضل الممارسات هي تعيين قيمة افتراضية للمعلمات الرسمية التي قد يتم تمرير قيم undefined
. على سبيل المثال:
الدالة getSum(a,b,c) { إذا (ج === غير محدد) ج = 0; console.log(a+b+c); } myFunction(1,2);
arguments
JavaScript
، والمعلمة الفعلية هي أيضًا كائن يمكن اعتبارها مصفوفة (مثل المصفوفة، وليست مصفوفة حقيقية)، المعلمات الفعلية هي arguments[0]、arguments[1]...
من اليسار إلى اليمين، تمثل arguments.length
عدد المعلمات الفعلية.
// ابحث عن مجموع المعلمات function getSum() { var aLength = الوسيطات. الطول؛ مجموع فار = 0; for(var i = 0;i < aLength;i++) { مجموع += الوسائط[i]; } return sum; } console.log(getSum(1,2,3,4,5))// الإخراج 15.
يتم حذف المعلمات الرسمية هنا مباشرة ويتم تمثيلها arguments[i]
.
JavaScript
المعقدة
يحتاج المطورون إلى التحقق من المراسلات بين كل معلمة فعلية ومعلمة رسمية، وهو أمر غير فعال للغاية. الحل الجيد هو استخدام كائن كمعلمة، وستعمل الدالة على المعلمة بناءً على اسم خاصية الكائن.
وظيفة myFunction(obj) { console.log(obj.name); obj.number++; return obj.number; } myObj = {name:"myObj",number:34}; myFunction(myObj);//Output myObj console.log(myObj.number);//Output 35
دالة (تسمى a
لتسهيل الكتابة) كمعلمات لوظيفة أخرى (تسمى دالة b
)، ويمكن للدالة b
في النهاية إرجاع قيمة محددة.
من حيث المبدأ، تستدعي الدالة b
الدالة a
في نص الدالة الخاص بها، لذلك يجب تمرير اسم الدالة a
لتعمل b
كمعلمة فعلية. على النحو التالي:
// ابحث عن القيمة القصوى function getMax(a,b) { return a>b?a:b } // ابحث عن القيمة الدنيا function getMin(a,b) { return a<b?a:b } // تأخذ الوظيفة التالية دالة كمعلمة وترجع في النهاية قيمة function getM(func,num1,num2) { return func(num1,num2); } getM(getMax,1,2);//Return 2 getM(getMin,1,2);//Return 1
نقوم بتمرير اسم الوظيفة a
( getMax
أو getMin
) إلى الوظيفة b
( getM()
)، ثم قم باستدعاء a
التي تم تمريرها داخل الدالة b
للحصول على النتائج ذات الصلة.