首页 > 解决方案 > 看不懂这两个词的意思

问题描述

let spaceship = {
  homePlanet : 'Earth',
  color : 'red'
};
let tryReassignment = obj => {
  obj = {
    identified : false, 
    'transport type' : 'flying'
  }
  console.log(obj) // Prints {'identified': false, 'transport type': 'flying'}
 
};
tryReassignment(spaceship) // The attempt at reassignment does not work.
spaceship // Still returns {homePlanet : 'Earth', color : 'red'};
 
spaceship = {
  identified : false, 
  'transport type': 'flying'
}; // Regular reassignment still works.

让我们看看代码示例中发生了什么:

我们用 let 声明了这个宇宙飞船对象。这使我们可以毫无问题地将其重新分配给具有已识别和“传输类型”属性的新对象。当我们使用旨在重新分配传递给它的对象的函数尝试相同的事情时,重新分配没有坚持(即使在对象上调用 console.log() 产生了预期的结果)。当我们将 spaceship 传递给该函数时,obj 成为对 spaceship 对象的内存位置的引用,而不是对 spaceship 变量的引用。这是因为 tryReassignment() 函数的 obj 参数本身就是一个变量。 tryReassignment() 的主体根本不知道 spaceship 变量! 当我们在 tryReassignment() 的主体中进行重新赋值时,obj 变量指向了对象 {'identified' : false, 'transport type' : 'flying'} 的内存位置,而 spaceship 变量完全没有改变从其早期的价值。

标签: javascriptobjectpass-by-reference

解决方案


推荐阅读