对象作为函数参数可能会导致的问题
函数参数是对象发生什么问题:
新手很容易跌倒的坑
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 }
对象作为函数参数可能会导致的问题相关推荐
- C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)
C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...
- 类对象作为函数参数进行值传递
这个是今天踩到的坑,记录一下. 首先先给出几个概念: 1)类对象在创建时会调用构造函数,在释放是会调用析构函数: 2)函数中的局部变量在函数返回后,会由于弹栈从而内存被释放: 3)如果函数参数是采用值 ...
- C++提高部分_C++类模板对象做函数参数---C++语言工作笔记090
然后我们再去看C++的类模板也可以做函数的参数,而且参数方式 可以有3种方式,1.可以指定传入类型,2可以把参数变成模板进行传递, 3.将整个类进行模板化 我们去写个例子去看看 首先我们写一个Pers ...
- 【C++ grammar】对象指针、对象数组、函数参数
目录 1.Object Pointer & Dynamic Object 1. Accessing Object Members via Pointers 2. Creating Dynami ...
- 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )
文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...
- C++中函数参数形式的总结
1.普通变量作为函数参数 2.数组作为函数变量 3.指针作为函数参数 #include<iostream> using namespace std; int Order(int *,int ...
- swift函数参数指针传递inout和@escaping冲突的解决方法
这里写目录标题 需求 解决方法 容易产生的问题 总结 今天深入解决关于函数参数指针的问题.问题是这样,我在swift的一个函数里面,参数里需要传递一个指针类型的Int,但是这个函数里面还有一个逃逸闭包 ...
- java.函数参数太多,Java方法参数太多怎么办—Part 2—引入参数对象,javapart
Java方法参数太多怎么办-Part 2-引入参数对象,javapart 目录 自定义类型 引入参数对象 本文是这个系列的第二篇文章,介绍了通过引入参数对象应对参数过多的问题.如果你也希望参与类似的系 ...
- python可变类型与不可变类型作为函数参数区别_不要用可变类型对象做函数默认参数...
不要用可变类型对象做函数默认参数 1. 可变对象做默认参数 内置数据类型int,float,bool,str,tuple 是不可变对象, 字典,集合,列表是可变对象. 在定义python函数时,千万不 ...
最新文章
- 在Asp.Net MVC中设定site路径所对应的默认action
- Java 中几种获取文件路径的方式
- UILable的text设置中划线(删除线)
- 简练软考知识点整理-项目合同的类型
- 第七章之main函数和启动例程
- MongoDB 的 upsert
- [leetcode]102.二叉树的层序遍历
- 使用Java Servlet,JSP标签和Stormpath快速构建Java Web App
- flush privileges
- Python | Xpath实战训练
- Android 开机自启动
- 在c语言中怎么实现循环结构,浅议C语言中循环结构的教学方法.pdf
- win10无法装载iso文件_教你用win10自带虚拟光驱打开iso镜像文件的方法
- Python 脚本编写
- 计算机语言abs,Abs函数
- android环信删除会话列表,关于环信删除会话之后,从好友列表进入无法显示聊天消息...
- 单片机C语言仿真图,单片机C语言程序设计代码和仿真图.doc
- ue4 改变枢轴位置_[UE4蓝图][Materials]虚幻4中可互动的雪地材质完整实现(一)
- 微信小程序 点击展开收起(点谁谁展开/收起)
- airflow调度方案