JavaScript は参照渡しですか? [重複] 質問する

JavaScript は参照渡しですか? [重複] 質問する

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

おすすめ記事