في Javascript، يمكن تعديل المعلمات التي تم تمريرها داخل الوظيفة، على النحو التالي
انسخ رمز الكود كما يلي:
وظيفة func1 (الاسم) {
الاسم = 'زنبق'؛
تنبيه (الاسم)؛
}
func1('jack');// زنبق الإخراج
دعونا ننظر إلى مثال آخر
انسخ رمز الكود كما يلي:
وظيفة fun1(ن) {
this.name = n;
}
وظيفة fun2(الاسم) {
fun1.call(this,'lily');
تنبيه (الاسم)؛
}
fun2("جاك");//إخراج "جاك"
أرادت الدالة fun1 تغيير المعلمة عند استدعاء fun2 إلى "lily"، لكنها فشلت. ما ينبثق لا يزال "جاك". فكر في السبب؟
في الواقع، لا يزال لدى fun1 القدرة على تعديل المعلمات عند استدعاء fun2 باستخدام سمة المتصل
انسخ رمز الكود كما يلي:
الدالة fun1() {
الوسيطات.callee.caller.arguments[0] = 'lily';
}
وظيفة fun2(الاسم) {
fun1.call(this,name);
تنبيه (الاسم)؛
}
fun2("جاك");//الإخراج "ليلي"
يمكن ملاحظة أن مكدس الاستدعاءات للوظيفة الداخلية مرئي للوظيفة الخارجية ويمكن تعديله.