js之传递参数

最近在重新看js高级程序设计,对之查缺补漏,以后每次碰到值得记录的都会发文。
在了解参数传递的之前,首先要知道js复制引用类型和基本类型的区别。

复制基本类型

let a = '1'
let b = a

上述代码执行过程:
1.创建变量a、b。(变量提升)
2.将 ‘1’ 赋值给a。
3.复制一个 ‘1’ 给b。
4.a和b的值相互独立,互不影响。

复制引用类型

let a = {}
let b = a
a.name = 'dd'
console.log(b.name)
// 'dd'

当复制引用类型时,其实复制的是a指向对象(在堆内存中)指针。
所以a和b指向的是一个对象(在堆内存中)。

传递参数

了解引用类型复制的原理后,在来看js的参数传递。
js的参数传递是按值传递的。看个例子

function test(obj) {
	obj.name = '李'
	obj = {}
	obj.name = '赵'
}
let person = {}
test(person)
console.log(person.name)
// ‘李’

别慌,一步一步分析。
1.前面说到js参数传递是按值传递的,但要注意的是,当参数是引用类型时,这个其实指的是person指向对象的指针。当执行test函数时,把person指向对象的指针作为参数传入,即obj保存着person指向对象的指针,所以**obj.name = ‘李’**执行完毕后,person指向的对象发生改变。
2.**obj = {}执行完毕时,obj不在保存指向原对象(person指向的对象)的指针,而是保存另一个指向新对象的指针,所以obj.name = ‘赵’**对person没有影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值