JavaScript 动态方法调用与参数修改的问题

作者: 来源:JavaEye 日期:2010-4-10

javascript 中可以对传进去的参数进行修改,如下:

function func1(name) {
    name = 33;
    alert(name);
}
func1();//输出33

如果这样呢?

function fun1() {
    this.name = 33;
}
 
function fun2(name) {
    fun1.call(this,name);
    alert(name);
}
 
fun2("Jack");//输出"Jack"

fun2 中调用 fun1 将 name 改变为 33。但实际上输出的仍然是 "Jack". 原因是两个 function 的 arguments 是不同的。

但是可以修改下 fun1, 利用 caller 属性改变

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

这次输出的是 33。所以外层的函数(fun2)对于内部调用的函数(fun1)来说,总是可见的。可以利用 arguments.callee.caller 取得调用函数。

相关文章