كيفية إعلان الوظائف
عادة ما تكون هناك طريقتان لإعلان وظيفة:
foo () {} ؛ // دالة إعلان var foo = function () {} ؛ // تعبير الوظيفةالفرق
1. يمكن تنفيذ تعبير الوظيفة مباشرة مع قوسين بعد ذلك
2. سيتم إعلان الوظيفة مسبقًا مسبقًا
قبل التحليل
دعونا نلقي نظرة أولاً على مثال:
foo () ؛ // إعلان الوظيفة foo_later () ؛ // foo_later ليست وظيفة foo () {console.log ('إعلان الوظيفة') ؛ } var foo_later = function () {console.log ('function expression') ؛ }كما ترون ، تم تسوية إعلان الوظيفة FOO ، ويمكن تنفيذها قبل رمزها الخاص ؛ تعبير وظيفة foo_later لا يمكن. لحل هذه المشكلة ، يجب علينا أولاً معرفة آلية العمل لمحلل JavaScript.
دفعة متغيرة (رافعة)
سيقوم محلل JavaScript برفع المتغيرات وإعلانات الوظيفة في نطاقها الخاص. وهذا يعني أن المثال أعلاه مفهومة وتوحلها من قبل المحلل في النموذج التالي:
دالة foo () {console.log ('إعلان الوظيفة') ؛ } // جميع إعلانات الوظائف متطورة var foo_later ؛ // تعبيرات الوظائف (إعلانات متغيرة) تقدم المتغيرات فقط ، وعملية المهمة ليست متقدمة FOO () ؛ foo_later () ؛ foo_later = function () {console.log ('function expression') ؛ }يمكن أن يفسر هذا أيضًا سبب استدعاء وظيفة قبل إرجاع تعبير الوظيفة إلى خطأ ، لأنه لم يتم تعيينه بعد ، إنه مجرد متغير غير محدد وبالطبع لا يمكن تنفيذه.
وبالمثل ، يمكننا أيضًا محاولة تخمين إخراج الكود التالي:
console.log (إعلان) ؛ var sensedlater = "الآن تم تعريفه!" ؛ console.log (sensedLater) ؛
يمكن تحليل هذا الرمز في النموذج التالي:
فارن. console.log (إعلان) ؛ // undefinedDeclaredLater = "الآن تم تعريفه!" ؛ console.log (sendedLater) ؛ // الآن تم تعريفه!
تم ذكر الإعلان المتغير أولاً (لذلك لن يتم الإبلاغ عن أي خطأ في المتغير) ، لكن المهمة غير متقدمة ، وبالتالي فإن نتيجة الإخراج الأولى غير محددة.
تجدر الإشارة إلى ذلك
نظرًا لأن إعلانات الوظيفة قد تم استخلاصها ، فلا تستخدم هذه الطريقة لإعلان وظائف مختلفة. حاول تخمين إخراج المثال التالي:
if (true) {function aaa () {Alert ('1') ؛ }} آخر {function aaa () {Alert ('2') ؛ }} aaa () ؛على عكس ما توقعناه ، ظهر الكود بـ "2". وذلك لأن إعلانات الوظيفة قد تم تحريكها مسبقًا قبل تنفيذ البيان IF ، وبالتالي فإن العبارة IF غير مجدية على الإطلاق. عندما يتم استدعاء AAA () ، يتم تنفيذ الوظيفة التالية مباشرة.
لخص
من خلال التفسير أعلاه ، يمكننا تلخيصه على النحو التالي:
• يتم تقديم إعلان المتغير إلى أعلى النطاق ، وتبقى المهمة في مكانها
• إعلان وظيفة كامل "قبل"
• عندما يتم تعيين وظيفة إلى متغير كقيمة ، فإن المتغير فقط "متقدم" ، والوظيفة ليست "متقدمة".
تجربة أكثر من خلال ممارسة الأمثلة أعلاه. أيضًا ، كأفضل ممارسة: يجب وضع إعلانات متغيرة في الجزء العلوي من النطاق/الوظيفة (JavaScript فقط نطاق الوظيفة!).
تتفهم المقالة أعلاه بشكل شامل إعلانات الوظيفة ، وتعبيرات الوظائف ، والتحسين المتغير هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.