# JS的传递类型

3 min read
Table of Contents

JavaScript 变量有两种不同数据类型:基本类型和引用类型。

基本数据类型是按值访问,可以直接操作保存在变量中的实际值。在传递类型的时候,基本类型是传值。

引用类型的值是保存在堆内存中的对象,JavaScript 不能直接操作对象的内存空间,实际操作的是对象的引用。在传值的时候,引用类型是传址。

变量存储方式

  • 栈(stack):自动分配内存空间,系统自动释放,里面存放的是基本类型的值和引用类型的地址
  • 堆(heap):动态分配内存,大小不定,不会自动释放,里面存放的引用类型的值
Stack

示例代码

传递引用类型的时候,会改变引用值。

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

More Posts

# Sass的基础用法

5 min read

Sass is an extension of CSS, adding nested rules, variables, mixins, selector inheritance, and more.