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