被引用对象的console.log不会打印我期望的内容

问题描述 投票:0回答:1

我有两个对象,一个函数和一些console.logs:

let obj1 = {
  value: "a"
}

let obj2 = {
  value: "b"
}

console.log(obj1.value)
console.log(obj2.value)


function change(obj1, obj2) {
  obj1 = obj2;
  obj2.value = "c";
  console.log(obj1.value)
  console.log(obj2.value)
}

change(obj1, obj2);

console.log(obj1.value)
console.log(obj2.value)

结果:

a b c c a c

而且我期望:

a b c c c c

有人可以解释为什么值是A而不是C吗?

javascript function object pass-by-reference pass-by-value
1个回答
0
投票
/* function scope obj1 and obj2, refer like function(f_obj1, f_obj2)
   f_obj1 is reference to global obj1
   f_obj2 is reference to global obj2 */
function change(obj1, obj2) {

  /* f_obj1 = reference of f_obj2 */
  obj1 = obj2;

  /* f_obj2 is referring global obj2 and value updated in global */
  obj2.value = "c";

  /* printing the f_obj1 and f_obj2 values */
  console.log(obj1.value)
  console.log(obj2.value)
}

// Now out of the function, So f_obj1 and f_obj2 are out of scope.
© www.soinside.com 2019 - 2024. All rights reserved.