标签:obj 函数 引用 person ECMAScript 按值 name
函数的参数都是按值传递(浅拷贝)
变量有按值
访问和按引用
访问,传参只有按值
传递
函数外的值会被复制到函数内部的参数中,同一个变量复制到另一个变量中
如果是原始值,那么跟原始值变量复制一样(即另一个值)
如果是引用值,那么跟引用值变量复制一样(即另一个引用,这个引用可以修改外部对象的属性,但重写这个引用时并不会修改外部的值)
按值传递参数
值会被复制到一个局部变量(即命名参数)
function addTen(num) {
num += 10
return num
}
let count = 20
let result = addTen(count)
console.log(count) // 20
console.log(result) // 30
count
原始值直接复制一份到 num
中
function setName(obj) {
obj.name = "Nicholas"
}
let person = new Object()
setName(person)
console.log(person.name) // "Nicholas"
这里即使对象是按值传进函数,obj 也会通过引用访问对象
当函数内部给 obj 设置了 name 属性时,函数外部对象也会反映这个变化,因为 obj 指向的对象保存在全局作用域的堆内存上
function setName(obj) {
obj.name = "Nicholas"
obj = new Object()
obj.name = "Greg"
}
let person = new Object()
setName(person)
console.log(person.name) // "Nicholas"
如果 person 是按引用访问,则 person 会指向 name 为 Greg 的新对象。但这里并没有,因为函数参数的值改变之后,原始的引用仍然没变,当 obj 在函数内部重写时,会变成一个指向本地对象的指针。
标签:obj,函数,引用,person,ECMAScript,按值,name 来源: https://www.cnblogs.com/pooc/p/14845517.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。