1. يطلق عليه وظيفة مجهولة المصدر تعمل على الفور (تسمى أيضًا الوظيفة التي تستدعي على الفور)
2. عند إرفاق وظيفة مجهولة ، ثم تتم إضافة قوس إلى الخلف ، يمكن تشغيل الوظيفة المجهولة على الفور! هل هناك شيء سحري؟
3. لاستخدام وظيفة ، يجب علينا أولاً إعلان وجودها. الطريقة الأكثر شيوعًا التي نستخدمها هي تحديد وظيفة باستخدام بيان الوظيفة
4. كائن الوظيفة
كائنات الوظائف هي كائنات متأصلة في JavaScript ، وجميع الوظائف هي في الواقع كائن وظيفة.
دعونا أولاً نلقي نظرة على ما إذا كان كائن الوظيفة يمكنه استخدام المُنشئ مباشرة لإنشاء وظيفة جديدة؟ الجواب نعم.
var abc = وظيفة جديدة ("x" ، "y" ، "return x*y ؛") ؛ تنبيه (ABC (2،3)) ؛ // "6"5. وظائف مجهولة لا تحتوي على أسماء ، لذلك تم توسيعها إلى مسألة كيف يجب أن نسميها (O_O)؟
دعوة وظائف مجهولة
var abc = function (x ، y) {return x+y ؛ } ALERT (ABC (2،3)) ؛ // "5"العملية أعلاه تعادل في الواقع تحديد وظيفة بطريقة مختلفة. هذا الاستخدام شيء نواجهه بشكل متكرر.
على سبيل المثال ، عندما نقوم بإعداد وظيفة معالج أحداث DOM Element ، فإننا عادة لا نسميها ، ولكن بدلاً من ذلك نعطي حدثها المقابل إشارة إلى وظيفة مجهولة.
استدعاء وظيفة مجهولة
استخدم () لإرفاق الوظيفة المجهولة ، ثم إضافة زوج من الأقواس (بما في ذلك قائمة المعلمات).
تنبيه ((وظيفة جديدة ("x" ، "y" ، "إرجاع x*y ؛")) (2،3)) ؛ // "6"6. ما هو دور الأقواس؟
يمكن أن تقسم الأقواس تعبيراتنا إلى أجزاء ، وكل قطعة ، أي كل زوج من الأقواس ، لها قيمة إرجاع. قيمة الإرجاع هذه هي في الواقع قيمة إرجاع التعبير بين قوسين.
لذلك ، عندما نرفق وظيفة مجهولة مع زوج من الأقواس ، تُرجع الأقواس كائن وظيفة من دالة مجهولة المصدر.
لذلك ، فإن إضافة وظائف مجهولة إلى زوج الأقواس يشبه الوظيفة المسماة ونحصل على موضعها المرجعي. لذلك إذا قمت بإضافة قائمة معلمات بعد هذا المتغير المرجعي ، فسيتم تنفيذ نموذج استدعاء الوظيفة العادية.
7. إعلانات الوظيفة ، تعبيرات الوظائف ، وظائف مجهولة
إعلان الوظيفة: وظيفة fnname () {...} ؛ استخدم الكلمة الرئيسية للوظيفة لإعلان وظيفة ، ثم تحديد اسم وظيفة ، يسمى إعلان الوظيفة.
تعبير الوظيفة var fnname = function () {...} ؛ أعلن دالة باستخدام الكلمة الرئيسية للدالة ، ولكن لا تسمي الوظيفة. أخيرًا ، يتم تعيين وظيفة مجهولة المصدر متغيرًا ، يسمى تعبير الوظيفة ، وهو الشكل الأكثر شيوعًا في بناء جملة تعبير الوظيفة.
وظيفة مجهولة: function () {} ؛ استخدم الكلمة الرئيسية للوظيفة لإعلان وظيفة ، ولكن لم يتم تسمية الوظيفة ، لذلك يطلق عليها وظيفة مجهولة. وظائف مجهولة تنتمي إلى تعبيرات الوظائف. الوظائف المجهولة لها العديد من الوظائف. إذا قمت بتعيين متغير ، فأنت تقوم بإنشاء وظيفة ، وإذا قمت بتعيين حدث ، فستصبح معالجًا للحدث أو إنشاء إغلاق ، إلخ.
الفرق بين إعلان الوظيفة والتعبير عن الوظيفة هو ذلك
1. عندما يقوم محرك JavaScript بتوزيع رمز JavaScript ، سيفعل "رفع إعلان" (رفع إعلان الوظيفة) عن إعلان وظيفة التنفيذ الحالي (النطاق). يجب أن تنتظر تعبيرات الوظائف حتى ينفذ محرك JavascirtP إلى خطه قبل تحليل تعبير الوظيفة من أعلى إلى الأسفل.
2. يمكن استدعاء تعبير الوظيفة على الفور مع قوسين بعد ذلك. لا يمكن إجراء إعلان الوظيفة ولا يمكن استدعاؤه إلا في شكل fnname ().
الكستناء
fnname () ؛ function fnname () {...} // عادي ، لأن "الترويج" إعلان الوظيفة ، يمكن أن تكون دعوة الوظيفة fnname () ؛ var fnname = function () {...} // تم الإبلاغالكستناء
var fnname = function () {Alert ('Hello World') ؛} () ؛ // تمت إضافة الطرود بعد تعبير الوظيفة. عندما يتوصل محرك JavaScript هنا ، يمكن استدعاء الوظيفة فورًا عندما يقوم محرك JavaScript هنا بتوصيف Fnname () {Alert ('hello world') ؛} () ؛ } () ؛ // خطأ في بناء الجملة ، على الرغم من أن الوظائف المجهولة تنتمي إلى تعبيرات الوظائف ، لا يتم تنفيذ أي عملية تعيين ، // بحيث يعامل محرك JavaScript الكلمة الرئيسية للوظيفة في البداية كإعلان دالة ، ويبلغ عن خطأ: اسم وظيفة مطلوبإذا كنت ترغب في إضافة قوسين بعد جسم الوظيفة ، فيمكنك تسميتها على الفور ، فيجب أن تكون هذه الوظيفة تعبيرًا عن الوظيفة ، وليس إعلانًا عن الوظيفة.
الكستناء
(Function (a) {console.log (a) ؛ // firebug output 123 ، استخدم () المشغل ()}) (123) ؛ (الدالة (a) {console.log (a) ؛ // firebug output 1234 ، استخدم () عامل () (1234)) ؛! دالة (a) {console.log (a) ؛ // Firebug Output 12345 ، استخدام! المشغل} (12345) ؛ +وظيفة (أ) {console.log (a) ؛ // Firebug Output 123456 ، use + operator} (123456) ؛ -tunction (a) {console.log (a) ؛ // Firebug Output 1234567 ، use - Operator} (1234567) ؛ var fn = function (a) {console.log (a) ؛ // Firebug Output 12345678 ، use = Operator} (12345678)يمكنك رؤية نتيجة الإخراج وإضافتها قبل الوظيفة! و +و - وحتى الفواصل يمكن استخدامها للتنفيذ مباشرة بعد تعريف الوظيفة ، و () ،! يشبه المشغلون مثل +، -، = تحويل إعلانات الوظيفة إلى تعبيرات الوظائف ، مما يلغي الغموض بين تعبيرات وظائف محرك JavaScript وإعلانات الوظائف ، وإخبار محرك JavaScript بأن هذا تعبير دالة ، وليس إعلانًا عن الوظيفة ، يمكنك إضافة أقواس بعد ذلك وتنفيذ رمز الوظيفة على الفور.
إضافة قوسين هي الطريقة الأكثر أمانًا للقيام بذلك ، لأن! سوف يقوم المشغلون مثل +، و - أيضًا بإجراء عمليات ذات قيمة إرجاع الوظيفة ، والتي تسبب في بعض الأحيان مشكلة غير ضرورية.
ولكن ما فائدة الكتابة بهذه الطريقة؟
لا يوجد مفهوم للنطاق الخاص في جافا سكريبت. إذا أعلنت أن بعض المتغيرات في النطاق العالمي أو المحلي في مشروع تم تطويره من قبل العديد من الأشخاص ، فقد يتم الكتابة فوقه من قبل الآخرين بنفس الاسم. وفقًا لخصائص سلسلة نطاق وظائف JavaScript ، يمكن استخدام هذه التقنية لتقليد نطاق خاص واستخدام وظيفة مجهولة كـ "حاوية". يمكن أن تصل "الحاوية" إلى المتغيرات الخارجية ، في حين أن البيئة الخارجية لا يمكنها الوصول إلى المتغيرات داخل "الحاوية" ، وبالتالي فإن المتغيرات المحددة داخل (الوظيفة () {...}) () لن تتعارض مع المتغيرات الخارجية ، والمعروفة باسم "المجهول المجهول" أو "مساحة الاسم".
يستخدم jQuery هذه الطريقة. عندما يتم لف الرمز jQuery في (وظيفة (نافذة ، غير محددة) {... رمز jQuery ...} (نافذة) ، يمكنه حماية المتغيرات الداخلية لـ jQuery عند استدعاء رمز jQuery في النطاق العالمي.