إذا كنت بحاجة إلى إنشاء وظيفة في JavaScript ، فهناك طريقتان: إعلان وظيفي ، تعبير الوظيفة ، كل كتابة على النحو التالي:
// الطريقة 1: الإعلان الوظيفي foo () {} // الطريقة 2: وظيفة التعبير var foo = function () {} ؛بالإضافة إلى ذلك ، هناك تعبير ذاتي تنفيذي ، والذي يستخدم بشكل أساسي لإنشاء نطاق جديد.
(function () {// var x = ...}) () ؛يتم تصنيف تعبير الوظيفة الذاتي المنفذ هذا على أنه الطريقة الثانية للطريقتين المذكورتين أعلاه ، والتي يمكن اعتبارها أيضًا تعبيرًا وظيفيًا.
أنشأت الطرق 1 والطريقة II وظيفة واسمها foo ، ولكن هناك اختلافات بين الاثنين. هناك آلية موجودة في مترجم JavaScript الذي يتم الترويج له (الرفع) ، مما يعني أن بيان المتغير (وظيفة) سيتم الترويج له في طليعة النطاق.
على سبيل المثال ، قطاع الكود التالي:
ALERT (FOO) ؛ // وظيفة bar_fn () {}نتائج الإخراج هي وظائف foo () {} ، غير محددة ، وظائف foo () {} ، و function bar_fn () {}.
يمكن ملاحظة أن بيان FOO مكتوب بعد التنبيه ، ولا يزال من الممكن استدعاؤه بشكل صحيح لأن مترجم JavaScript سوف يرفعه إلى التنبيه الأمامي ، ولا يتمتع شريط الوظائف الذي أنشأه تعبير الوظيفة بهذا العلاج.
هل يتم تحسين الشريط؟
لذلك ، قد يكون ترتيب الكود أعلاه لمحرك JavaScript مثل هذا:
ملحوظة:
بالمعنى الدقيق للكلمة ، إذا قمت بإنشاء وظيفة في JavaScript ، فهناك طريقة أخرى ، تسمى "طريقة بنية الوظيفة":
var foo = function ('ALERT ("hi!") ؛') ؛ تستخدم هذه الطريقة سلسلة كمعلمة لتشكيل جسم دالة. ومع ذلك ، في هذه الطريقة ، سيتم خصم كفاءة التنفيذ ، ويبدو أنه لا يمكن تمرير المعلمات ، لذلك من الأفضل استخدام أقل.