الوظيفة هي المفهوم الأكثر استخدامًا في جافا سكريبت. الوظيفة في JavaScript هي أسهل وظيفة للبدء ، ولكن من الصعب أيضًا فهمها وإتقانها في JavaScript.
1. نوع الوظيفة هو أحد أنواع المرجع في JS. كل وظيفة هي في الواقع كائن مثيل لنوع الوظيفة ، مع خصائصه وطرقه الخاصة. بسبب الكائن الوظيفي ، فإن اسم الوظيفة هو في الواقع مؤشر لكائن الوظيفة.
2. طرق تعريف الوظيفة الشائعة الاستخدام
1. إعلان الوظيفة:
وظيفة SUM (A ، B) {return a+b ؛}2. التعبير:
var sum = function () {return a+b ؛ } ؛ // لاحظ Semicolon // الفرق بين الطريقتين: // سيكون المترجم هو أول من يقرأ إعلان الوظيفة وجعله متاحًا قبل التنفيذ. عند استخدام تعبير ، يجب أن تنتظر حتى ينفذ المحلل إلى سطر الكود الذي يتم فيه تحديده قبل تفسيره وتنفيذه (يتم تقديم إعلان متغير ، بينما يتم ترك القيمة في مكانها) (Sum (10 ، 10)) ؛ SUM SUM (A ، B) {return a+b ؛} // ↑ سيتم تنفيذ الكود أعلاه بشكل طبيعي ، لأنه قبل تنفيذ الكود ، سيتم الترويج للمحلل من خلال إعلان الوظيفة ، وقراءة وإضافة إعلان الوظيفة إلى بيئة التنفيذ ، ووضعه في الجزء العلوي من تنبيه شجرة الشفرة (shotof sum) ؛ تنبيه (مجموع (10 ، 10)) ؛ var sum = function (a ، b) {return a+b ؛} // ↑ السبب هو أن الوظيفة موجودة في بيان التهيئة ، وليس إعلانًا عن الوظيفة ، ولن يتم تطويره ، ولكنه لن يتقدم فقط بمبلغ var ، واستخدام مشغل typeof لإظهار أن SUM غير محدد ، وبالتالي يتم الإبلاغ عن الخطأ3. اسم الوظيفة يحمل مؤشرًا فقط لكائن دالة ، وبالتالي لا يختلف اسم الوظيفة عن المتغيرات الأخرى التي تحتوي على مؤشر الكائن ، أي يمكن أن يكون لكائن الوظيفة أسماء متعددة:
وظيفة SUM (a ، b) {return a+b ؛} console.log (sum (2 ، 3)) ؛ // 5var anothersum = sum ؛ // يشير anothersum المتغير أيضًا إلى نفس وظيفة console.log (Anothersum (4 ، 5)) ؛ // 9sum = null ؛ // لم يعد متغير SUM يحفظ المؤشرات إلى Console.log كائن الوظيفة (ANOTHOTSUM (1 ، 3)) ؛ // لا يزال من الممكن استدعاء المتغير4. لماذا لا يفرط JS في هذا المفهوم.
الوظيفة إضافة (a) {return a+3 ؛} وظيفة إضافة (a) {return a+5 ؛} var result = add (3) ؛ // 8 // الوظيفين لهما نفس الاسم ، ويمكن أن تكون النتيجة فقط هي الوظيفة الأخيرة في الكتابة السابقة ، لذلك لا يمكن إعادة تحميلها5. الخصائص الداخلية للدالة: داخل الوظيفة ، هناك كائنان خاصان ، وسيطتين
1. الحجج:
الوسائط هي كائن صفيف للفئة ، يحتوي على جميع معلمات الوظيفة الواردة. يحتوي هذا الكائن على سمة تسمى Callee. قيمة الخاصية هي مؤشر ، تشير إلى الوظيفة نفسها التي تملك كائن الوسائط.
دالة foo () {var a = endress.callee ؛ إرجاع A.ToString () ؛} foo () ؛/*إرجاع النتيجة: هذه الوظيفة مفيدة إلى حد ما عند استدعاءها بشكل متكرر ، ولها العديد من العيوب ، ويتم إزالتها في الوضع الصارم ES5*/2. هذا: ببساطة ، يشير هذا إلى كائن البيئة الذي يتم فيه تنفيذ الوظيفة. هذا يشير إلى الكائن الذي يتم فيه تنفيذ الكائن. من المعقد للغاية التوسع ، مقالة واحدة فقط
// تودو:
3. ES5 يحدد خاصية أخرى من الوظيفة: المتصل. تشير خاصية الوظيفة هذه إلى الوظيفة التي تستدعي الوظيفة الحالية.
دالة inner () {console.log (inner.caller) ؛} وظيفة Outer () {inner () ؛} Outer () ؛ // وظيفة Outer () {inner () ؛}4. سمة الطول: تشير إلى عدد المعلمات التي تريدها الوظيفة
وظيفة إضافة (a ، b ، c) {return a+b+c ؛} add.length ؛ // 35. سمة النموذج الأولي الشهير ، ببساطة ، هي كائن ، كائن تم إنشاؤه عن طريق استدعاء مُنشئ ، يحتوي على خصائص وطرق يمكن مشاركتها بواسطة جميع الحالات من نوع معين. من المعقد للغاية التوسع ، مقالة واحدة فقط
// تودو:
6. طريقتان للوظيفة: Call () وتطبيق (). كلاهما يطلق على الوظيفة في نطاق معين ، وفي الواقع يتم تعيين هذه القيمة داخل الوظيفة.
1. Call (): على غرار طريقة التطبيق () ، فإن الفرق هو أن طريقة تلقي المعلمات مختلفة ، ويجب إدراج المعلمات واحدة تلو الأخرى.
2. تطبيق (): يتلقى معلمتين ، أحدهما هو نطاق تشغيل الوظيفة ، والآخر عبارة عن مجموعة من المعلمات ، والتي يمكن أن تكون صفيفًا أو كائن صفيف لفئة الوسائط.
وظيفة SUM (a ، b) {return a+b ؛} callsum (a ، b) {return sum.apply (this ، expuments) ؛} // المعلمة الثانية هي وسيطات كائن صفيف callsUmum1 (a ، b) {return sum.apply (this ، [a ، b]) // 5 console.log (callsum1 (3 ، 5)) ؛ // 83. تمرير المعلمات ووظائف الاتصال ليس هو المكان الذي يتم فيه استخدام Call () وتطبيق (). الشيء القوي الحقيقي في عملية التوسع هو نطاق
var color = 'red' ؛ var obj = {color: 'blue'} fOOU () {console.log (this.color) ؛ } foo () ؛ //'red'foo.call(this) ؛//'red'foo.call(oBJ) ؛ // "الأزرق" // قد تغيرت بيئة التنفيذ في الدعوة الأخيرة إلى وظيفة FOO () ، وهذا يشير إلى كائن OBJ ، لذلك هو "أزرق"أكبر ميزة لاستخدام Call () وتطبيق () لتوسيع نطاقها هي فصل الكائنات والأساليب
4. ES5 يحدد طريقة جديدة: BIND () ، والتي تُرجع وظيفة ، حيث تكون هذه القيمة مرتبطة بالقيمة التي تم تمريرها إلى وظيفة BIND ().
var x = 9 ؛ var module = {x: 81 ، getx: function () {return this.x ؛ }} ؛ module.getx () ؛ // 81VAR Retrievex = module.getx ؛ retrievex () ؛ // 9 ، لأنه في هذه الحالة ، يشير "هذا" إلى المتغير العالمي var boundgetx = retrievex.bind (الوحدة النمطية) ؛ // ربط هذا في وظيفة Retrievex () إلى الوحدة إلى الأبد ، ثم استدعاء هذه الوظيفة لتشغيل BoundgetX () دائمًا في كائن الوحدة النمطية ؛ // 81ما سبق هو تحليل متعمق لأنواع الوظائف في JavaScript التي قدمها المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كنت تريد معرفة المزيد ، فيرجى الانتباه إلى wulin.com.