في JavaScript ، وظيفة الوظيفة هي كائن.
لا توجد طريقة زائدة في JS
في JavaScript ، لا يوجد مفهوم للطريقة (الوظيفة) الزائد.
مثال:
نسخة الكود كما يلي:
<html>
<head>
<script type = "text/javaScript">
وظيفة إضافة (رقم)
{
تنبيه (رقم + 20) ؛
}
وظيفة إضافة (رقم ، رقم 1)
{
تنبيه (رقم + 30) ؛
}
إضافة (10) ؛
</script>
</head>
<body>
</body>
</html>
يظهر مربع الرصاص في صفحة الويب 40.
Explanation على الرغم من أن الطريقة الثانية هي معلمتان ، إلا أنه لا يزال يسمى.
بعد تبادل ترتيب الطريقتين ، يعرض المربع المنبثقة 30. يمكن ملاحظة أنه بغض النظر عن عدد المعلمات ، تسمى الطريقة التالية مع نفس الاسم.
كيف تشرح هذه الظاهرة؟
هذا لأن إعلان الوظيفة يخلق في الواقع كائنًا:
نسخة الكود كما يلي:
<html>
<head>
<script type = "text/javaScript">
وظيفة إضافة (رقم)
{
تنبيه (رقم + 20) ؛
}
/*
الوظيفة أعلاه تعادل:
var add = function (number)
{
تنبيه (رقم + 20) ؛
}
*/
وظيفة إضافة (رقم ، رقم 1)
{
تنبيه (رقم + 30) ؛
}
/*
الوظيفة أعلاه تعادل:
var add = function (number ، number1)
{
تنبيه (رقم + 30) ؛
}
*/
إضافة (10) ؛
</script>
</head>
<body>
</body>
</html>
وبهذه الطريقة ، أضف ما يشير فعليًا إلى الكائن اللاحق ، وسيتم تعيين المعلمات المخصصة عند استدعاء الطريقة إلى المعلمات الرسمية للأسلوب بالترتيب ، والمعلمات التي لم يتم تعيينها بعد ذلك غير محددة.
عند استدعاء وظائف JavaScript ، لا يوجد فحص صارم لعدد المعلمات. لا بأس أن يكون العدد الفعلي للمعلمات أصغر من عدد المعلمات الرسمية. المعلمات الرسمية التي لم يتم تعيينها هي قيم غير محددة.
من الممكن أيضًا أن يكون عدد المعلمات الحقيقية أكبر من عدد المعلمات الرسمية. وبهذه الطريقة ، سيتم استخدام المعلمات الفعلية السابقة فقط ، ولن يتم استخدام المعلمات الفعلية الإضافية.
كائن وظيفة
يوجد كائن دالة في JavaScript ، وجميع الوظائف المخصصة من نوع كائن الوظيفة.
جميع المعلمات التي تلقاها كائن الوظيفة من نوع السلسلة ، والمعلمة الأخيرة هي هيئة الوظيفة التي سيتم تنفيذها ، والمعلمة السابقة هي المعلمات التي تحتاج الوظيفة حقًا إلى استلامها.
مثال:
نسخة الكود كما يلي:
<html>
<head>
<script type = "text/javaScript">
var add = function new ("number" ، "number1" ، "Alert (number + number1) ؛") ؛
var add = وظيفة جديدة ("الرقم" ، "تنبيه (رقم + 20) ؛") ؛
إضافة (10 ، 30) ؛
</script>
</head>
<body>
</body>
</html>
وسيطات الكائن الضمنية
في JavaScript ، كل وظيفة لها وسيطات كائن ضمنية ، تمثل المعلمات التي تم تمريرها فعليًا إلى الوظيفة.
الوسيطات لا علاقة لها بالمعلمات الرسمية للوظيفة ورقمها.
الوسيطات لها طول سمة مفيد ، مما يشير إلى طول المعلمة الفعلية. يمكنك استخدام هذا لمحاكاة الحمل الزائد للوظيفة:
أمثلة التمرين:
نسخة الكود كما يلي:
<html>
<head>
<script type = "text/javaScript">
وظيفة إضافة (رقم 1 ، رقم 2)
{
التنبيه (الحجج. الطول) ؛
تنبيه (الحجج [0]) ؛
تنبيه (الحجج [1]) ؛
تنبيه (الحجج [2]) ؛
}
// إضافة (2 ، 3 ، 4) ؛
وظيفة add2 ()
{
إذا (1 == وسيطات. الطول)
{
تنبيه (الحجج [0]) ؛
}
وإلا إذا (2 == الحجج. الطول)
{
التنبيه (الحجج [0] + وسيطات [1]) ؛
}
وإلا إذا (3 == الحجج. الطول)
{
تنبيه (وسيطات [0] + وسيطات [1] + وسيطات [2]) ؛
}
}
add2 (3) ؛
add2 (3 ، 4) ؛
add2 (3 ، 4 ، 5) ؛
</script>
</head>
<body>
</body>
</html>
يحتوي كل كائن دالة على سمة طول ، مما يشير إلى تنسيق المعلمة الذي تتوقع أن تتلقاه الوظيفة.
إنه يختلف عن وسيط الوظيفة. MANDICES.LENGTH يمثل عدد المعلمات التي تلقاها بالفعل من قبل الوظيفة.
مثال:
نسخة الكود كما يلي:
<html>
<head>
<script type = "text/javaScript">
var add = function (num ، num2 ، num3)
{
تنبيه (num + num2 + num3) ؛
}
تنبيه (add.length) ؛ // الإخراج 3
إضافة (1 ، 2 ، 3) ؛
var add2 = function ()
{
}
تنبيه (add2.length) ؛ // الإخراج 0
</script>
</head>
<body>
</body>
</html>