تقدم هذه المقالة بشكل أساسي وظائف عادية ووظائف مجهولة ووظائف الإغلاق
1. مقدمة للوظائف العادية
1.1 مثال
نسخة الكود كما يلي:
وظيفة معروضة (اسم) {
تنبيه (اسم) ؛
}
1.2 الكتابة فوق الوظائف مع نفس الاسم في JS
في JS ، لا يتم تحميل الوظائف. أنها تحدد الوظائف بنفس اسم الوظيفة وتوقيعات المعلمة المختلفة. ستتجاوز الوظائف اللاحقة الوظائف السابقة. عند استدعاء ، سيتم استدعاء الوظائف التالية فقط.
نسخة الكود كما يلي:
var n1 = 1 ؛
وظيفة إضافة (value1) {
إرجاع N1 + 1 ؛
}
التنبيه (إضافة (N1)) ؛ // تسمى الوظيفة التالية ، والإخراج هو: 3
وظيفة إضافة (value1 ، value2) {
قيمة الإرجاع 1 + 2 ؛
}
تنبيه (إضافة (N1)) ؛ // الإخراج: 3
1.3 حجج كائن
تشبه الوسيطات C# params ، المعلمات المتغيرة تشغيل: عدد المعلمات التي تم تمريرها في الوظيفة أكبر من عدد المعلمات في وقت التعريف.
نسخة الكود كما يلي:
الوظيفة الموضحة (الاسم) {
تنبيه (اسم) ؛ // Zhang San
لـ (var i = 0 ؛ i <enduments.length ؛ i ++) {
التنبيه (الحجج [i]) ؛ // Zhang San ، Li Si ، Wang Wu
}
}
أسماء معروضة ('Zhang San' ، 'Li Si' ، 'Wang Wu') ؛
1.4 قيمة النطاق الافتراضي للوظيفة
إذا لم تحدد الوظيفة قيمة الإرجاع ، فإن الإرجاع الافتراضي "غير محدد"
نسخة الكود كما يلي:
وظيفة showmsg () {
}
التنبيه (Showmsg ()) ؛ // الإخراج: غير محدد
2. وظائف مجهولة
2.1 وظائف مجهولة متغيرة
2.1.1 الوصف
يمكن تعيين وظائف للمتغيرات والأحداث.
2.1.2 مثال
نسخة الكود كما يلي:
// وظيفة متغيرة مجهولة ، يمكن أن يكون الجانب الأيسر متغيرات ، أحداث ، إلخ.
var anonymousnormal = function (p1 ، p2) {
تنبيه (p1+p2) ؛
}
مجهول غير طبيعي (3،6) ؛ // الإخراج 9
2.1.3 سيناريوهات قابلة للتطبيق
① تجنب تلوث اسم الوظيفة. إذا أعلنت وظيفة تحمل اسمًا أولاً ثم قم بتعيينها إلى متغير أو حدث ، فسيؤدي ذلك إلى إساءة استخدام اسم الوظيفة.
2.2 وظيفة مجهولة بدون اسم
2.2.1 الوصف
وهذا هو ، عند الإعلان عن الوظيفة ، يتم اتباع المعلمات. عندما يقوم بناء الجملة JS بتخفيض هذه الوظيفة ، يتم تنفيذ الرمز الموجود بداخله على الفور.
2.2.2 مثال
نسخة الكود كما يلي:
(وظيفة (p1) {
تنبيه (P1) ؛
}) (1) ؛
2.2.3 السيناريوهات المعمول بها
① تنفيذ مرة واحدة فقط. إذا تم تحميل المتصفح ، فإنه يحتاج فقط إلى تنفيذ وظائف لا يتم تنفيذها لاحقًا.
3. وظيفة الإغلاق
3.1 الوصف
لنفترض أن الوظيفة A تعلن عن الوظيفة B داخليًا ، تشير الوظيفة B إلى متغير بخلاف الوظيفة B ، وقيمة إرجاع الوظيفة A هي مرجع للدالة B. ثم الوظيفة B هي وظيفة الإغلاق.
3.2 مثال
3.2.1 مثال 1: المراجع العالمية والمراجع المحلية
نسخة الكود كما يلي:
وظيفة funa () {
var i = 0 ؛
وظيفة funb () {// الإغلاق وظيفة funb
i ++ ؛
تنبيه (ط)
}
إرجاع funb
}
var allshowa = funa () ؛ // المرجع المتغير العالمي: الإخراج التراكمي 1 ، 2 ، 3 ، 4 ، إلخ.
وظيفة partshowa () {
var showa = funa () ؛ // مرجع متغير محلي: فقط الإخراج 1
Showa () ؛
}
AllShowa هو متغير عالمي يشير إلى Funa Funa. كرر allshowa () وسوف إخراج القيم المتراكمة مثل 1 ، 2 ، 3 ، 4.
قم بتنفيذ الوظيفة partshowa () ، لأنه يتم الإعلان فقط عن Showa المتغير المحلي داخليًا للإشارة إلى Funa. بعد التنفيذ ، يتم إصدار الموارد التي تشغلها Showa بسبب علاقة النطاق.
مفتاح الإغلاق هو النطاق: لن يتم إصدار الموارد التي تشغلها المتغيرات العالمية إلا بعد تغيير الصفحة وإغلاق المتصفح. عندما يكون var allshowa = funa () ، فإنه يعادل allshowa يشير إلى funb () ، بحيث لا يتم إعادة تدوير الموارد في funb () بواسطة GC ، وبالتالي فإن الموارد في funa () لن تكون كذلك.
3.2.2 مثال 2: وظيفة الإغلاق المعلمة
نسخة الكود كما يلي:
وظيفة funa (arg1 ، arg2) {
var i = 0 ؛
وظيفة funb (الخطوة) {
i = i + الخطوة ؛
تنبيه (ط)
}
إرجاع funb
}
var allshowa = funa (2 ، 3) ؛ // المكالمة هي funa arg1 = 2 ، arg2 = 3
Allshowa (1) ؛ // المكالمة هي Funb Step = 1 ، الإخراج 1
allshowa (3) ؛ // المكالمة هي funb setp = 3 ، الإخراج 4
3.2.3 مثال 3: المشاركة المتغيرة في دالة الوالدين funa
نسخة الكود كما يلي:
وظيفة funa () {
var i = 0 ؛
وظيفة funb () {
i ++ ؛
تنبيه (ط)
}
allshowc = function () {// allshowc يشير إلى وظائف مجهولة ومشاركة متغير مع funb
i ++ ؛
تنبيه (ط)
}
إرجاع funb
}
var allshowa = funa () ؛
var allshowb = funa () ؛ // allshowb المراجع funa ، allshowc rebinds داخليًا ، وتشارك المتغير I مع allshowb
3.3 سيناريوهات قابلة للتطبيق
① تأكد من أمان المتغيرات داخل Funa Funa ، لأن الخارجي لا يمكنه الوصول مباشرة إلى متغيرات Funa.
هل لديك أي فكرة عن وظيفة وظيفة JavaScript؟ إذا كان لديك أي أسئلة ، يرجى ترك رسالة لي.