ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

函数的变量中传递的是对象

2021-09-08 02:32:34  阅读:158  来源: 互联网

标签:obj 变量 setName 对象 函数 传递 person name


function setName(obj) {
   obj.name = 'Nicholas';
}
let person = {};
setName(person);
 console.log(person.name);

  我们创建了一个对象并把他保存在变量person中。然后,这个对象被传给setName()方法,并被复制到参数
obj中。在函数内部,obj和person都指向同一个对象。结果就是,即使对象是按值传进函数,obj也会通过引用访问
对象。当函数内部给obj设置了name属性时,函数外部的对象也会反映这个变化,因为obj指向的对象保存在全局作用
域的堆内存上。很多开发者=错误的认为,挡在局部作用域中修改对象而变化反映到全局时,就意味着参数是按引用传
递的。

 在创建一个函数的时候,在函数体内定义变量名为‘Nicholas’并赋值给参数obj.name。
  再重新定义一个新的对象,person
  把新对象person作为参数传递进setName函数体。并进行调用。
function setName(obj) {
  obj.name = "Nicholas";
  obj = new Object();
  obj.name = "police";
}
let person = {};
setName(person);
console.log(person.name);
/* 这个例子前后唯一变化的就是setName()中多了两行代码,将obj重新定义为一个有着不同name的新对象。当
person传入setName()时,其name属性被设置为"Nicholas".然后变量obj被设置为一个新对象且name属性设置
为"police".如果person是按引用传递的,那么person应该自动将指针改为指向name为""police"的对象。可是,
当我们再次访问person.name时,它的值是“Nicholas”,这表明函数中参数的值改变之后,原始的引用仍然没有改
变。当obj在函数内部被重写时,它变成了一个指向本地对象的指针。而那个本地对象在函数执行结束时就被销毁了。
 */
**// 注意:ECMAScript中函数的参数就是局部变量。**

标签:obj,变量,setName,对象,函数,传递,person,name
来源: https://www.cnblogs.com/caesar-null/p/15240904.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有