为什么Javascript变量没有通过引用传递对象?

时间:2015-11-09 03:33:34

标签: javascript

我正在将一个对象传递给一个函数。我正在拉出对象的属性,这是一个易于阅读的子对象。但是,第二个对象不影响它在第一个对象上的类似属性。这是为什么?

我希望在保存事件时更新函数作用域之外的processItem.event。为什么必须更新processItem而不仅仅是指向它的局部变量?

这有效:

this.submitForm = function(processItem) {
    var event = processItem.event
    if (event.new) {
        EventDataService.create(event).then(function(response) {
            processItem.event = response.data;
        });
    } else {
        EventDataService.update(event).then(function(response) {
            processitem.event = response.data
        });
    }
};

这不是

this.submitForm = function(processItem) {
    var event = processItem.event
    if (event.new) {
        EventDataService.create(event).then(function(response) {
            event = response.data;
        });
    } else {
        EventDataService.update(event).then(function(response) {
            event = response.data
        });
    }
};

1 个答案:

答案 0 :(得分:7)

var event = processItem.event

现在eventprocessItem.event

相同
event = response.data

现在eventresponse.data引用的内容相同,并且不再引用与processItem.event相同的内容。它与

非常不同
processItem.event = response.data

这会使processItem.eventresponse.data共同推荐(但不再与event共同推荐。)

这与函数参数无关,但事实上JavaScript有引用,而不是别名。