如何解决JavaScript 是否通过引用传递?
基元通过值传递,对象通过“引用的副本”传递。
具体来说,当您传递一个对象(或数组)时,您(无形地)传递了对该对象的引用,并且可以修改该对象的 内容 ,但是如果您尝试覆盖引用,则不会影响调用者持有的引用 - 即引用本身是按值传递的:
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
解决方法
JavaScript 是通过引用传递还是通过值传递?
这是 JavaScript: The GoodParts
中的一个示例。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());