函数参数是对象发生什么问题:

新手很容易跌倒的坑

function fn(person) {person.age = 26 // 修改了原对象的值person = {name: 'Jhon',age: 30}return person
}const person = {name : 'Tom',age: 25
}const person2 = fn(person)console.log(person, person2)// out put => { name: 'Tom', age: 26 } { name: 'Jhon', age: 30 }

分析:

  • 明确: 函数传参是地址
  • 模拟浏览器: 声明了一个函数,生命力一个对象 定义了一个常量:person2 = fn(person)
  • 从右向左运算 fn(person) => person是一个对象,对象便开辟了一块存储空间,放在堆中,然后存入了name: Tom,age=50 将person 地址为 &0x763; 传入fn
  • 顺序执行fn 首先 0x763 => age =26;
  • 再挂载一个 person 地址为 &0x7E; 然后初始化,然后返回。
  • 拿 person2 接到了返回值,然后打印 其结果为{ name: ‘Tom’, age: 26 } { name: ‘Jhon’, age: 30 }

对象作为函数参数可能会导致的问题相关推荐

  1. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)

    C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...

  2. 类对象作为函数参数进行值传递

    这个是今天踩到的坑,记录一下. 首先先给出几个概念: 1)类对象在创建时会调用构造函数,在释放是会调用析构函数: 2)函数中的局部变量在函数返回后,会由于弹栈从而内存被释放: 3)如果函数参数是采用值 ...

  3. C++提高部分_C++类模板对象做函数参数---C++语言工作笔记090

    然后我们再去看C++的类模板也可以做函数的参数,而且参数方式 可以有3种方式,1.可以指定传入类型,2可以把参数变成模板进行传递, 3.将整个类进行模板化 我们去写个例子去看看 首先我们写一个Pers ...

  4. 【C++ grammar】对象指针、对象数组、函数参数

    目录 1.Object Pointer & Dynamic Object 1. Accessing Object Members via Pointers 2. Creating Dynami ...

  5. 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

    文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...

  6. C++中函数参数形式的总结

    1.普通变量作为函数参数 2.数组作为函数变量 3.指针作为函数参数 #include<iostream> using namespace std; int Order(int *,int ...

  7. swift函数参数指针传递inout和@escaping冲突的解决方法

    这里写目录标题 需求 解决方法 容易产生的问题 总结 今天深入解决关于函数参数指针的问题.问题是这样,我在swift的一个函数里面,参数里需要传递一个指针类型的Int,但是这个函数里面还有一个逃逸闭包 ...

  8. java.函数参数太多,Java方法参数太多怎么办—Part 2—引入参数对象,javapart

    Java方法参数太多怎么办-Part 2-引入参数对象,javapart 目录 自定义类型 引入参数对象 本文是这个系列的第二篇文章,介绍了通过引入参数对象应对参数过多的问题.如果你也希望参与类似的系 ...

  9. python可变类型与不可变类型作为函数参数区别_不要用可变类型对象做函数默认参数...

    不要用可变类型对象做函数默认参数 1. 可变对象做默认参数 内置数据类型int,float,bool,str,tuple 是不可变对象, 字典,集合,列表是可变对象. 在定义python函数时,千万不 ...

最新文章

  1. 在Asp.Net MVC中设定site路径所对应的默认action
  2. Java 中几种获取文件路径的方式
  3. UILable的text设置中划线(删除线)
  4. 简练软考知识点整理-项目合同的类型
  5. 第七章之main函数和启动例程
  6. MongoDB 的 upsert
  7. [leetcode]102.二叉树的层序遍历
  8. 使用Java Servlet,JSP标签和Stormpath快速构建Java Web App
  9. flush privileges
  10. Python | Xpath实战训练
  11. Android 开机自启动
  12. 在c语言中怎么实现循环结构,浅议C语言中循环结构的教学方法.pdf
  13. win10无法装载iso文件_教你用win10自带虚拟光驱打开iso镜像文件的方法
  14. Python 脚本编写
  15. 计算机语言abs,Abs函数
  16. android环信删除会话列表,关于环信删除会话之后,从好友列表进入无法显示聊天消息...
  17. 单片机C语言仿真图,单片机C语言程序设计代码和仿真图.doc
  18. ue4 改变枢轴位置_[UE4蓝图][Materials]虚幻4中可互动的雪地材质完整实现(一)
  19. 微信小程序 点击展开收起(点谁谁展开/收起)
  20. airflow调度方案

热门文章

  1. 从工作实践中积累Linux常用脚本(一)
  2. HBase: Thrift写数据报错——socket.error: [Errno 32] Broken pip
  3. JSON学习笔记(五)- JSON.stringify()
  4. redis面试问题(一)
  5. LOJ#2087 国王饮水记
  6. 离线手动部署docker镜像仓库——harbor仓库(二)
  7. 构建简单spring boot 项目
  8. hadoop文件系统与I/O流
  9. Linux学习-01-安装虚拟机与linux系统
  10. 合理的嵌入式开发学习路线