掘金小册学习笔记 2019-03-28

function test(person) {
  person.age = 26
  person = {
    name: 'yyy',
    age: 30
   }
    return person
  }

  const p1 = {
    name: 'yck',
    age: 25
  }
  const p2 = test(p1)
  console.log(p1) //---->???
  console.log(p2)//---->???
答案:{name:'yck',age:26}  {name:'yyy',age:30}

***
对于理解p1需要明确的:
a.首先要明确的是js函数中所有参数都是按照值进行传递的。
b.参数传递过程中有分为两种情况:①被传递参数类型为值类型;②被传递参数类型为引用类型
b-1:被传递参数为值类型的时候,就将值复制一个给参数(函数的局部变量);
b-2:被传递的参数为引用类型的时候,就将这个值内存的指针复制一个给参数(函数的局部变量)

首先person复制到了p1的地址(这里p1是引用类型,p1和person指向同一个地址),进入到test函数,
p1对象和函数内的局部变量person拥有同一个指针,所以当在函数内修改age的值为26时,p1对象的age也会被修改为26;            
但是当在函数内部将person重写为其他对象的时候,就相当于把函数内的person之前的指针给修改了(这个地方注意了,只是内部的person修改了,
外面的p1现在已经和他没有联系了,之前有联系是因为二者指向同一个地址,现在内部的局部变量的指针指向了新的对象,而p1依然是被修改过的);
所以控制台的console.log的结果是{name:'yck',age:26}

p2等于函数return的这个新对象。 ```
 部分内容转载于 达摩会武术
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容