Javascript では、渡されたパラメータは次のように関数内で変更できます。
次のようにコードをコピーします。
関数 func1(名前) {
名前 = 'ユリ';
アラート(名前);
}
func1('jack');//ユリを出力
別の例を見てみましょう
次のようにコードをコピーします。
関数 fun1(n) {
this.name = n;
}
関数 fun2(名前) {
fun1.call(this,'ユリ');
アラート(名前);
}
fun2("jack");//「ジャック」を出力
fun1 関数は、fun2 を「lily」に呼び出すときにパラメータを変更しようとしましたが、失敗しました。出てくるのはやはり「ジャック」です。理由を考えてみてください。
実際、fun1 には、fun2 を呼び出すときに caller 属性を使用してパラメータを変更する機能がまだあります。
次のようにコードをコピーします。
関数 fun1() {
argument.callee.caller.arguments[0] = 'ユリ';
}
関数 fun2(名前) {
fun1.call(これ,名前);
アラート(名前);
}
fun2("jack");//「ユリ」を出力
内部関数の呼び出しスタックは外部関数から参照可能であり、変更できることがわかります。