高級プログラム設計【3】の3.7.1パラメータを理解する
10225 ワード
function test(a){
console.log(a);
console.log(arguments[0] == a); // true
}
上記の例では、arguments
は、a
と同じメモリ空間にはアクセスしない.arguments
はパラメータによって与えられたものであるので、パラメータが基本タイプの場合は、arguments
は、同じアドレスを指すのではなく、パラメータの値を直接コピーする.ただし、パラメータが参照タイプの場合は、同じアドレスを指します.【p 66とは異なる】var a = 2;
test(a); // a ,
function test(){
console.log(a); // 2
console.log(arguments[0]); // 2
arguments[0] = arguments[0] + 2;
console.log(a); // 2
console.log(arguments[0]); // 4
}
var b = {name:'b'};
test2(b); // b ,arguments b
function test2(){
console.log(arguments[0]); // {name:'b'}
b.age = 2;
console.log(arguments[0]); // {name:'b', age:2}
arguments[0].f = 'zs';
console.log(arguments[0] == b); // true
console.log(arguments[0]); // {name:'b', age:2, f: 'zs'}
console.log(b); // {name:'b', age:2, f: 'zs'}
}
後の文の【p 71】で強調されたパラメータは値によって伝達されますが、私は特にその意味を理解していません.変数は対応するアドレスを指し、その値を表示するだけです.新しいオブジェクトを設定すると、必ず元のアドレスを切って、新しいアドレスを割り当てずに新しいアドレスを指します.var a = {name:'a'}; // A
var a1 = a; // A
console.log(a) // {name:'a'}
console.log(a1) // {name:'a'}
a = {age: 23} // , B
console.log(a) // {age: 23}
console.log(a1) // {name:'a'} A
元の住所を修正する場合、上記のコードは次のように変更されます.var a = {name:'a'}; // A
var a1 = a; // A
console.log(a) // {name:'a'}
console.log(a1) // {name:'a'}
delete a.name; // ,a A
a.age = 23; // ,a A
console.log(a) // {age: 23} A
console.log(a1) // {age: 23} A