JavaScript 是否通过引用传递? [复制]

2024-01-01

JavaScript 是按引用传递还是按值传递?

这是一个例子JavaScript:好的部分 https://en.wikipedia.org/wiki/Douglas_Crockford#Bibliography。我很困惑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());

基元通过值传递,对象通过“引用的副本”传递。

具体来说,当您传递一个对象(或数组)时,您正在(无形地)传递对该对象的引用,并且可以修改contents该对象的,但如果您尝试覆盖引用,它不会影响调用者持有的引用的副本 - 即引用本身是按值传递的:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 是否通过引用传递? [复制] 的相关文章

随机推荐