ICode9

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

ECMAScript 中所以函数的参数都是按值传递

2021-06-03 16:03:18  阅读:135  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

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

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

ICode9版权所有