JS在函数

时间:2015-12-19 09:59:13

标签: javascript

以下是代码:

 var a = {};
 var b = {name:"Spork"};

 function connect(o1,o2){
    o1 = o2;
 };

 connect(a,b);

 console.log(a);
 console.log(b);

打印:{}{name:"Spork"}

应该是:{name:"Spork"}{name:"Spork"}

请告诉我为什么最后没有指向b。如果在函数中通过引用传递对象,我认为我的函数告诉a指向与b相同的内存空间。

2 个答案:

答案 0 :(得分:0)

关于变量的可见性,看到你在connect方法之外声明setInterval,然后将它们传递给connect方法,var a = {}; var b = {name:"Spork"};o1 and o2方法的本地方法并且connect方法中发生的任何变化都不会反映在它之外,那就是为什么在打印它们时你不是空值connect

答案 1 :(得分:0)

"通过引用传递"只是一种抽象;您实际上是通过值传递对内存中对象的引用。因此o1o2是包含ab包含的相同引用的不同变量。

简单来说,ao1是两个具有相同内容的不同容器。与bo2相同。

由于o1o2独立于ab,因此将一个引用分配给另一个引用不会在函数外部执行任何操作;所有这一切都会覆盖o1中的引用,这意味着o1o2将引用相同的对象..

您想要的是修改引用指向对象。在您的情况下,您希望将所有属性从一个对象(即o2指向的对象)复制到另一个对象(o1指向的对象)。

Javascript使用Object.assign()提供了一种方便的方法:

function connect(o1, o2){
    Object.assign(o1, o2);
}

Here是一个演示。