تعريف الحجج
تحتوي جميع الوظائف على كائن وسيطاتها الخاصة لتخزين المعلمات التي تتلقاها بالفعل ، دون أن تقتصر على قائمة المعلمات المحددة عند إعلان الوظيفة. إنها ليست صفيفًا ولكنها تشبه صفيف. لديها نفس خصائص الوصول والأساليب مثل صفيف. يمكنه الوصول إلى قيم المعلمة الفردية المقابلة بواسطة الوسيطات [n] ولديها طول سمة طول الصفيف. ولكن هناك بعض الطرق التي لا تحتوي على صفائف. يمكنك تحويل الحجج إلى صفائف حقيقية من خلال الاتصال ، ثم إجراء عمليات الصفيف.
var args = array.prototype.slice.call (وسيطات) ؛
صفيف الفصل
1. تحديد ما إذا كانت الحجج هي صفيف
تنبيه (حجج مثيل صفيف) ؛ تنبيه (وسيطات مثيل كائن) ؛
2. كيفية تحديد بدقة أن البيانات هي مثيل لفئة صفيف (صفيف)
دالة isArray (value) {if (typeof array.isarray === "function") {return array.isarray (value) ؛ } آخر {return object.prototype.toString.call (value) === "[كائن صفيف]" ؛ }}3. تحويل الحجج إلى صفيف
الطريقة 1: يمكن العثور على أنواع مدمجة من خلال النموذج الأولي. Array.Prototype.slice هو شريحة الطريقة المدمجة للوصول إلى الصفيف. إرجاع صفيف من خلال طريقة الشريحة. المكالمة هي طريقة تستدعي كائنًا ويحل محل الكائن الحالي بكائن آخر.
var arg = array.prototype.slice.call (وسيطات ، 0) ؛
الطريقة 2: الأداء أسوأ من الطريقة 1 ، لأنه ينشئ صفيفًا أولاً ثم يستمر.
var arg = [] .slice.call (الوسائط ، 0) ؛
الطريقة 3: تحويل إلى صفيف من خلال حلقة
وظيفة toarray (الوسيطات) {var a = [] ؛ لـ (var i = 0 ؛ i <enduments.length ؛ i ++) {A.UNSHIFT (الوسائط. [i]) ؛ } إرجاع A ؛}المتصل
عندما يتم استدعاء وظيفة من خلال وظيفة أخرى ، ستقوم الوظيفة التي تتم استدعاءها تلقائيًا بإنشاء سمة المتصل ، مشيرًا إلى كائن الوظيفة الذي يطلق عليه. إذا لم يتم استدعاء الوظيفة ، يكون المتصل فارغًا.
وظيفة testCaller () {var caller = testCaller.Caller ؛ التنبيه (المتصل) ؛} دالة acaller () {testCaller () ؛} acaller () ؛ما يلي هو محتوى الدالة acaller.
الحجج. callee
يشير الوسائط. callee إلى وظيفة التشغيل نفسها وإرجاع كائن الوظيفة الذي يتم تنفيذه ، أي جسم كائن الوظيفة المحدد.
ملاحظة: الوسيطات. الطول هو طول المعلمة الفعلية ، الوسيطات.
الحصول على المعلمات الفعلية للوظيفة من خلال الوسيطات ، والحصول على المعلمات الرسمية للدالة من خلال الوسيطات.
كما أنه يستخدم على نطاق واسع في عمليات الإغلاق.
var i = 0 ؛ الدالة B (num) {if (num <10) {num ++ ؛ i ++ ؛ // إذا كانت هناك معلمات ، فيجب أن تجلب Callee أيضًا المعلمات ؛ الحجج. callee (num) ؛ } آخر {// output 2 ALERT ("the call"+i+"callee!") ؛ }} b (8) ؛ يوفر تطبيق الوسائط. // استخدم الوسيطات. x * ediuments.callee (x - 1): 1} (10) ؛ // الإخراج 6 تنبيه (C (3)) ؛ // Output 3628800 ALERT (C (10)) ؛مثال: يجد Callee مجموع 1-N
دالة fn (n) {if (n == 1) return n ؛ عودة أخرى n+edation.callee (n-1) ؛}يسمح بوظيفة مجهولة للاتصال بها
مثال:
قائمة الوظائف (type) {var result = "<"+type+"l> <li>" ؛ var args = array.prototype.slice.call (الوسائط ، 1) ؛ النتيجة += args.join ("</li> <li>") ؛ النتيجة+= "</li> </"+type+"l>" ؛ نتيجة الإرجاع ؛} var listhtml = list ("o" ، "one" ، "اثنين") ؛ console.log (listhtml) ؛مثال 2: سؤال المقابلة: ما هي نتيجة Console.log التالية [1،2،3،4]؟
وظيفة foo (x) {console.log (وسيطات) ؛ return x ؛} foo (1،2،3،4) ؛ function foo (x) {console.log (encuments) ؛ إرجاع x ؛} (1،2،3،4)أثناء الانفصال ، دالة fn () {} (1) ؛ سيتم معالجتها بشكل منفصل وتقسيمها إلى وظيفتين ، الأول هو الدالة fn () {} ، والثاني هو وظيفة مجهولة: (1). إذا لم يكن لدى الثاني معلمات ، فسيتم الإبلاغ عن خطأ ، ولكن يتم تضمين الوظيفة أعلاه في A () ، وهو أمر صحيح.
(وظيفة fn () {console.log (الوسائط) ؛} (1،2،3،4)) ؛ (وظيفة foo (x) {console.log (الوسائط) ؛ return x ؛}) (1،2،3،4) foot foo ()