# JS的传递类型
3 min read
Table of Contents
JavaScript 变量有两种不同数据类型:基本类型和引用类型。
基本数据类型是按值访问,可以直接操作保存在变量中的实际值。在传递类型的时候,基本类型是传值。
引用类型的值是保存在堆内存中的对象,JavaScript 不能直接操作对象的内存空间,实际操作的是对象的引用。在传值的时候,引用类型是传址。
变量存储方式
- 栈(stack):自动分配内存空间,系统自动释放,里面存放的是基本类型的值和引用类型的地址
- 堆(heap):动态分配内存,大小不定,不会自动释放,里面存放的引用类型的值
示例代码
传递引用类型的时候,会改变引用值。
function change(o) { o.a = 'a'}
var oo = { a: 'b',}
change(oo)console.log(oo) // { a: 'a' }传递基本类型的时候,不会改变值。
function change(v) { v = 'v'}
var val = 'val'
change(val)console.log(val) // val相关问题
var foo = { n: 1 };(function (foo) { console.log(foo.n) foo.n = 3 var foo = { n: 2 } console.log(foo.n)})(foo)console.log(foo.n)解答:
var foo = { n: 1 } //全局变量,此值为对象,属于引用类型;(function (foo) { //形参foo同实参foo一样指向同一片内存空间 var foo console.log(foo.n) //输出1 foo.n = 3 //形参与实参foo指向的内存空间里的n的值被改为3 foo = { n: 2 } //形参foo指向了新的内存空间,里面n的值为2. console.log(foo.n) //输出新的内存空间的n的值})(foo)console.log(foo.n) //实参foo的指向还是原来的内存空间,里面的n的值为3.
// 最终结果:1, 2, 3