深入理解Javascript动态方法调用与参数修改的问题

作者:拾光

时间:2026-10-27

浏览:216

本文探讨JavaScript中函数参数的修改机制。通过示例展示直接修改参数无效的情况,并深入解析利用caller属性和arguments.callee访问调用栈以修改外层函数参数的实现原理,揭示JavaScript动态调用与参数传递的特性。

文章目录

JavaScript函数参数修改机制

在JavaScript中,可以在函数内部对传入的参数进行修改,示例如下。

代码实现如下:

function func1(name) {
name = 'lily';
alert(name);
} 
func1('jack');//输出lily

接下来看另一个例子。


代码实现如下:

function fun1(n) {
this.name = n;
} 
function fun2(name) {
fun1.call(this,'lily');
alert(name);
} 
fun2("jack");//输出"jack"

利用caller属性修改参数

在上面的例子中,fun1函数试图修改fun2调用时的参数为“lily”,但并未成功,弹出的结果仍然是“jack”。这里需要思考其原因。

实际上,fun1函数仍然有能力修改fun2调用时的参数,这可以通过使用caller属性来实现。

代码实现如下:

function fun1() {
arguments.callee.caller.arguments[0] = 'lily';
} 
function fun2(name) {
fun1.call(this,name);
alert(name);
} 
fun2("jack");//输出"lily"

由此可见,外层函数对于内层函数的调用栈是可见且可修改的。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章