js中简单和复杂数据类型存储和传递问题
来源:互联网 发布:淘宝宝贝主图更换技巧 编辑:程序博客网 时间:2024/06/05 16:12
简单和复杂数据类型存储和传递:
<script type="text/javascript"> var num1 = 0; var num2 = num1; num1 = 1; //请问num2的值会改变吗? console.log(num2); var stu1 = new Object(); stu1.name = "张三"; var stu2 = stu1; //改变stu1的name值 stu1.name = "李四"; //请问stu2的值会改变吗? console.log(stu2.name); </script>
结果如下:
又如:
//简单数据类型 var num = 1; fn1(num); console.log(num); function fn1(aaa){ aaa = aaa*10; } //复杂数据类型 var obj = new Object(); obj.name = "张三"; fn2(obj); console.log(obj); function fn2(object){ object.name = "李四"; }
结果也会一样
为什么会出现这种情况呢?
简单数据类型赋值时,传的是数值。(即开辟新的空间)
而复杂数据类型赋值时,传的时地址(即修改同一片内存空间)
如下图所示:
简单数据类型赋值:
因为是在栈里面另外开辟一个空间,所以num2的值不会改变,改变的是另一个空间的值
复杂数据类型:
而复杂的数据类型时在堆中复用一个内存空间
所以才会出现以上的情况
那么要如何避免呢?
当你向修改成员变量中的简单数据类型时,不要通过参数传递,只要在函数中直接修改就行了。
阅读全文
0 0
- js中简单和复杂数据类型存储和传递问题
- 简单数据类型和复杂数据类型值传递
- js的基本数据类型有哪些? ECMAScript中有5中简单数据类型(也称为基本数据类型): Undefined、Null、Boolean、Number和String。还有1中复杂的数据类型————
- js 基本数据类型 和复杂数据类型的区别
- JS基本数据类型和复杂类型的区别
- js值传递和引用传递问题
- js中数值传递和引用传递
- 4-复杂数据类型和函数
- JS简单数据类型和引用类型
- 复杂和简单
- js 中参数传递(值传递和引用传递)
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- js 中数据类型和对象的相关
- js值传递和引用传递的小问题
- 字符串,数组和字典的简单本地存储!以及复杂类型对象的存储
- ksoap2 传递复杂对象 复杂数据类型
- innodb的MVCC功能
- 架构师之路--视频业务介绍,离线服务架构和各种集群原理
- 创建运行第一个安卓项目
- 启动Maven项目报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Linux功能及常见问题解决
- js中简单和复杂数据类型存储和传递问题
- 读者-写者模型
- Linux mint安装Qt5
- java多线程之内存可见性-synchronized、volatile
- java安全初始化
- PAT-A-1018. Public Bike Management (30)
- react-native Modal的学习与使用
- 第二章练习题(Chapter2)
- 单例模式实现在线用户列表