JavaScript 值传递的数据类型: 字符串(String), 数字(Number), 布尔(Boolean), 空(Null), 未定义(Undefined),
这五种数据类型是按值访问的, 因为可以直接操作保存在变量中的实际值, JavaScript 值传递的数据类型保存在栈内存中.
- <!DOCTYPE html>
- <HTML xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title></title>
- <script type="text/javascript">
- var a = 10;
- var b = a;
- document.write(b); // 输出 10
- a = 12; // 变量重新赋值
- document.write(b); // 输出 10 说明 a 变量的改变未影响到 b(值传递)
- </script>
- </head>
- <body>
- </body>
引用传递
JavaScript 引用传递的数据类型: 数组(Array), 对象(Object), 函数(Function()).JavaScript 的引用数据类型是保存在堆内存中的对象.
你不可以直接访问堆内存空间中的位置和操作堆内存空间. 只能操作对象在栈内存中的引用地址. 所以, 引用类型数据在栈内存中保存的实际上
是对象在堆内存中的引用地址. 通过这个引用地址可以快速查找到保存中堆内存中的对象.
- <!DOCTYPE HTML>
- <HTML xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>
- </title>
- <script type="text/javascript">
- var array1 = [10, 20, 30];
- var array2 = array1;
- document.write(array2[1]); // 输出 20
- array1[1] = 100;
- document.write(array2[1]); // 输出 100 此处是引用传递(通过数组的方式)
- </script>
- </head>
- <body>
- </body>
- </HTML>
总结
JavaScript 不同的数据类型决定不同的值传递类型.
1)基本类型的变量保存的是变量值, 引用类型的变量保存的是内存地址;
2)基本类型长度固定, 在内存中占据固定大小的空间, 数据存放在栈内存中; 引用类型可以给对象添加属性和方法, 长度不固定, 数据存放在堆内存中.
引用类型的存储需要栈区和堆区 (堆区是指内存里的堆内存) 共同完成, 栈区内存保存变量标识符和指向堆内存中该对象的指针, 也可以说是该对象在堆内存的地址;
3)基本类型在赋值的时候拷贝值, 引用类型在赋值的时候只拷贝地址, 不拷贝值.
来源: http://www.bubuko.com/infodetail-3358307.html