JavaScript は参照渡しですか、それとも値渡しですか?
以下は例ですJavaScript: 良い部分my
。私は長方形関数のパラメータについて非常に混乱しています。これは実際には でありundefined
、関数内で再定義されています。元の参照はありません。関数パラメータからこれを削除すると、内部領域関数はこれにアクセスできなくなります。
クロージャですか? しかし関数は返されません。
var shape = function (config) {
var that = {};
that.name = config.name || "";
that.area = function () {
return 0;
};
return that;
};
var rectangle = function (config, my) {
my = my || {};
my.l = config.length || 1;
my.w = config.width || 1;
var that = shape(config);
that.area = function () {
return my.l * my.w;
};
return that;
};
myShape = shape({
name: "Unhnown"
});
myRec = rectangle({
name: "Rectangle",
length: 4,
width: 6
});
console.log(myShape.name + " area is " + myShape.area() + " " + myRec.name + " area is " + myRec.area());
ベストアンサー1
プリミティブは値によって渡され、オブジェクトは「参照のコピー」によって渡されます。
具体的には、オブジェクト (または配列) を渡すと、そのオブジェクトへの参照が (目に見えない形で) 渡され、そのオブジェクトの内容を変更することは可能ですが、参照を上書きしようとしても、呼び出し元が保持している参照のコピーには影響しません。つまり、参照自体は値によって渡されます。
function replace(ref) {
ref = {}; // this code does _not_ affect the object passed
}
function update(ref) {
ref.key = 'newvalue'; // this code _does_ affect the _contents_ of the object
}
var a = { key: 'value' };
replace(a); // a still has its original value - it's unmodfied
update(a); // the _contents_ of 'a' are changed