إعلان الوظيفة
وظيفة foo () {}سيتم رفع الدالة foo قبل تنفيذ البرنامج بأكمله ، لذلك يتوفر في النطاق (النطاق) بأكمله الذي يحدد وظيفة FOO. حتى تسميته قبل تعريف الوظيفة على ما يرام.
foo () ؛ // Works لأنه تم إنشاء FOO قبل تشغيل هذا الرمز FOO () {}لأنني أخطط لكتابة مقال على وجه التحديد ، لن أشرح ذلك بالتفصيل هنا.
تعبيرات الوظيفة
بالنسبة لإعلانات الوظيفة ، يكون اسم الوظيفة ضروريًا ، ولكن بالنسبة إلى تعبيرات الوظائف ، فهو اختياري. لذلك ، تظهر تعبيرات الوظيفة المجهولة وتعبيرات الوظائف المسماة. على النحو التالي:
إعلان الوظيفة: وظيفة الدالة () {}
إعلان الوظيفة: وظيفة الدالة [اختياري] () {}
ثم أعلم أنه إذا لم يكن هناك اسم وظيفة ، فيجب أن يكون تعبيرًا عن الوظيفة ، ولكن كيف يجب أن نحكم إذا كان هناك اسم وظيفة؟
تحدد JavaScript أنه إذا كان جسم الوظيفة بأكمله جزءًا من التعبير ، فهو تعبير دالة ، وإلا فهو إعلان دالة. ما يلي هو التعبير:
var fuc = foo () {}دعونا نعطي بعض أمثلة التعبير الأكثر تطرفًا:
! وظيفة foo () {} true && function foo () {}العبارات المذكورة أعلاه هي مجرد تمييز تعبيرات الوظائف ، وهي غير مكتوبة بشكل عام مثل هذا. ثم استخدم مثال المقارنة لمعرفة التأثير:
لم يتم تعريف foo1 () ؛ // foo1 foo2 () ؛ // works لأنه تم إنشاء foo2 قبل تشغيل هذا الرمز! FOO1 () {Alert ('foo1 works') ؛} ؛ fOUT FOO2 () {Alert ('foo2 works') ؛} ؛تعبيرات وظيفة مجهولة
var foo = function () {} ؛يعين المثال أعلاه دالة مجهولة المصدر للمتغير FOO.
فو // 'undefined'foo () ؛ // هذا يرفع typeerrorvar foo = function () {} ؛نظرًا لأن VAR عبارة عن إعلان ، يتم رفع FOO المتغير (تمت ترقيته) هنا ، لذلك عند تنفيذ البرنامج ، يكون المتغير FOO قابلًا للاتصال.
ومع ذلك ، نظرًا لأن عبارة التخصيص يسري فقط في وقت التشغيل ، فإن قيمة المتغير FOO غير محددة.
تعبيرات الوظيفة المسماة
شيء آخر للحديث عنه هو تعيين الوظائف المسماة.
var foo = bar function () {bar () ؛ // works} ؛ bar () ؛ // Referenceerrorهنا ، يتم تعيين شريط الوظائف المسماة إلى FOO المتغير ، لذلك فهو غير مرئي خارج إعلان الوظيفة ، ولكن لا يزال من الممكن استدعاؤه داخل وظيفة الشريط. وذلك لأن آلية JavaScript لتسمية وظائف ، فإن اسم الوظيفة صالح دائمًا في النطاق داخل الوظيفة.