تعريف وظيفة JavaScript
1: استدعاء وظيفة الكلمة الرئيسية للبناء ، مثل:
مسافة الوظيفة (x1 ، x2 ، y1 ، y2)
{{
var dx = x2-x1 ؛
var dy = y2-y1 ؛
إرجاع Math.Sqrt (DX*DX+DY*DY) ؛
}
2: استخدم FUNION () وظيفة بناء
var f = new function*"x" ، "y" ، "return x*y") ؛
يخلق سطر الكود هذا وظيفة جديدة ، والتي تعادل بشكل أساسي التعريف الوظيفي لتعريف بناء الجملة الذي تعرفه:
وظيفة F (x ، y)
{{
إرجاع x*y ؛
}
يمكن لمؤسس Functino () قبول أي معلمات سلسلة متعددة. الفصل الرئيسي للوظيفة خلال المعلمة الأخيرة ، والتي يمكن أن تحتوي على أي عبارة javaScript ، تفصل الرقم بين العبارات. يتم استخدام المعلمات الأخرى لشرح سلسلة اسم معلمة النموذج المحددة بواسطة الوظيفة. إذا قمت بتحديد الوظيفة بدون معلمات ، فيمكنك فقط تمرير سلسلة (أي موضوع الوظيفة) إلى المنشئ.
لاحظ أنه لا يتم استخدام أي من المعلمات التي تم تمريرها إلى وظيفة المنشئ () لشرح اسم الوظيفة لإنشاءها. أصبحت وظيفة usen -onnamed التي تم إنشاؤها بواسطة مُنشئ الدالة () أحيانًا "دالة مجهولة".
قد ترغب في معرفة وظيفة مُنشئ الوظيفة (). لماذا لا تستخدم فقط عبارة الوظيفة لتحديد جميع الوظائف؟ والسبب هو أن مُنشئ الدالة () يسمح لنا ببناء وتجميع دالة ، والتي لن تقصرنا على جسم الوظيفة مسبقًا بواسطة عبارة الوظيفة. إن تأثير التأثير السلبي الناتج عن ذلك هو أنه في كل مرة يتم فيها استدعاء وظيفة ، يجب أن يقوم مُنشئ الوظيفة () بتجميعه. لذلك ، لا ينبغي لنا أن نسمي هذا المنشئ بشكل متكرر في جسم حلقة أو في الوظائف التي يتم استخدامها غالبًا.
سبب آخر باستخدام الدالة () البناء هو أنه يمكن أن يحدد الوظيفة كجزء من التعبير عن JavaScript ، بدلاً من تحديد بيان.
3: وظيفة الكمية المباشرة
الوظيفة الكمية المباشرة هي تعبير يحدد وظيفة مجهولة. يشبه بناء جملة الكمية المباشرة للوظيفة إلى حد كبير عبارة الوظيفة ، ولكن يتم استخدامه كتعبير ، وليس عبارة ، ولا يحتاج إلى تحديد اسم الوظيفة. يستخدم رمز الخط الثلاثة التالي عبارة الوظيفة () ، ومُنشئ الدالة () ، ووظيفة الوظيفة لتحديد ثلاثة وظائف في الأساس:
دالة f (x) {return x*x} ؛
var f = new function ("x" ، "return x*x ؛") ؛
var f = function (x) {reurn x*x} ؛
على الرغم من أن الوظيفة تنشئ بشكل مباشر وظيفة غير اسمها ، إلا أن بناء الجملة الخاص به ينص أيضًا على أنه يمكنه تحديد اسم الوظيفة ، وهو أمر مفيد للغاية عند كتابة وظيفته المتكررة. على سبيل المثال:
var f = function fact (x) {if (x <= 1) return 1 ؛
يحدد الكود أعلاه وظيفة لم يتم تسجيل اسمها ويتم تخزينها في متغير F للمرجع. لا ينشئ حقًا وظيفة تسمى Fact () ، ولكنها تسمح للوظيفة باستخدام الاسم لاقتباس نفسه. ومع ذلك ، تجدر الإشارة إلى أن الإصدار السابق من JavaScript1.5 لم ينفذ بشكل صحيح الوظيفة الوظيفية لهذا الاسم.
يشبه استخدام دالة الوظيفة إلى حد كبير طريقة إنشاء وظيفة مع الوظيفة () البناء. نظرًا لأن جميعها تم إنشاؤها عن طريق التعبير عن JavaScript ، والتي لا يتم إنشاؤها بواسطة العبارات ، فإن طريقة استخدامها أكثر مرونة ، خاصة بالنسبة للوظائف التي يتم استخدامها مرة واحدة فقط ولا تحتاج إلى تسميتها. على سبيل المثال ، يمكن تخزين وظيفة محددة من خلال تعبير القياس المباشر للدالة في متغير ، وتم نقله إلى وظائف أخرى ، وحتى المكالمات مباشرة:
A [0] = function (x) {return x*x ؛} ؛
A.Sort (A ، B) {return AB ؛}) ؛
var tensquared = (function (x) {return x*x ؛}) ؛
مثل مُنشئ الدالة () ، تقوم الوظيفة بإنشاء وظيفة لم تكشف عن اسمها مباشرةً ولن تقوم بتخزين هذه الوظيفة تلقائيًا في السمة. ومع ذلك ، بالمقارنة مع مُنشئ الوظيفة () ، فإن المبلغ المباشر للوظيفة له ميزة مهمة. يجب تفسير موضوع وظيفة تم إنشاؤها بواسطة وظيفة البناء () من خلال السلسلة ، وبهذه الطريقة للتعبير عن وظيفة طويلة ومعقدة خرقاء. ولكن يتم استخدام الجسم الرئيسي للوظيفة بواسطة بناء جملة JavaScript القياسي. ويتم حل المبلغ المباشر للوظيفة مرة واحدة ، ويتم تمرير رمز JavaScript إلى الوظيفة () ببناء الوظيفة كسلسلة إلى مُنشئ الدالة () فقط يتم تحليلها وتجميعها مرة واحدة في كل مرة يتم فيها استدعاء المنشئ.
في JavaScript1.1 ، يمكن استخدام وظيفة المنشئ () لتحديد الوظائف. يجب أن تنتبه إلى الاختلافات المهمة بين هاتين الطريقتين.
أولاً ، تتيح وظيفة المنشئ () إنشاء وتجميع رمز JavaScript أثناء التشغيل. لكن الوظيفة المباشرة الكمية هي جزء ثابت من بنية الوظيفة ، تمامًا مثل عبارة الوظيفة.
ثانياً ، كنتيجة لا مفر منها للفرق الأول ، في كل مرة يتم فيها استخدام وظيفة المنشئ () لتحليل جسم الوظيفة وإنشاء كائن جديد لرقم East Han. إذا ظهرت دعوة المنشئ في دورة أو تظهر في وظيفة تسمى غالبًا ، فإن كفاءة هذه الطريقة منخفضة للغاية. من ناحية أخرى ، فإن الوظيفة المتداخلة التي يمكن أن تظهر مباشرة في الدورة ولا تتم إعادة تشكيل الوظائف في كل مكالمة ، ولا يتم إنشاء كائن وظيفة جديد كلما واجهت كمية مباشرة.
النقطة الثالثة بين المبلغ بين المُنشئ () والوظيفة هي أن الوظيفة التي تم إنشاؤها بواسطة وظيفة المنشئ () لا تستخدم نطاق العبارة. تم شرح الكود:
var y y = "Global" ؛
وظيفة ConstructionFunction () ()
{{
var y y = "local" ؛
إرجاع وظيفة جديدة ("العودة y") ؛
}
// سيعرض سطر الكود هذا "Global" ، لأن الوظيفة التي يتم إرجاعها بواسطة مُنشئ الدالة () لا تستخدم النطاق المحلي.
// إذا كنت تستخدم مبلغًا مباشرًا للدالة ، فقد يعرض سطر الكود هذا "محليًا".
تنبيه (بناء ()) ؛