ใน Javascript พารามิเตอร์ที่ส่งผ่านสามารถแก้ไขได้ภายในฟังก์ชันดังต่อไปนี้
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น func1 (ชื่อ) {
ชื่อ = 'ลิลลี่';
การแจ้งเตือน (ชื่อ);
-
func1('jack');//เอาต์พุตลิลลี่
ลองดูอีกตัวอย่างหนึ่ง
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น fun1 (n) {
นี้.ชื่อ = n;
-
ฟังก์ชั่น fun2 (ชื่อ) {
fun1.call(นี่,'ลิลลี่');
การแจ้งเตือน (ชื่อ);
-
fun2("แจ็ค");//เอาต์พุต "แจ็ค"
ฟังก์ชัน fun1 ต้องการเปลี่ยนพารามิเตอร์เมื่อเรียก fun2 เป็น "lily" แต่ล้มเหลว สิ่งที่ปรากฏขึ้นยังคงเป็น "แจ็ค" ลองคิดดูว่าทำไม?
ในความเป็นจริง fun1 ยังคงมีความสามารถในการแก้ไขพารามิเตอร์เมื่อเรียกใช้ fun2 โดยใช้แอตทริบิวต์ผู้โทร
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น fun1() {
arguments.callee.caller.arguments[0] = 'ลิลลี่';
-
ฟังก์ชั่น fun2 (ชื่อ) {
fun1.call(นี่,ชื่อ);
การแจ้งเตือน (ชื่อ);
-
fun2("แจ็ค");//เอาต์พุต "ลิลลี่"
จะเห็นได้ว่า call stack ของฟังก์ชันภายในสามารถมองเห็นได้กับฟังก์ชันภายนอกและสามารถแก้ไขได้