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取得调用函数。