一道关于值引用和地址引用的面试题

     let obj1 = {
         key: 'value1'
     }
     function fun1(adr) { 
        adr = {
            key: 'value11'
        }
        return obj1
     }
     console.log(fun1(obj1))
     console.log(obj1)

log1输出的是

{
	  key:'value11'
}

log2输出的是

{
	  key:'value1'
}

为啥呢?我思考了一下。
大致流程是这样的:
当我们调用一个函数的时候,传给函数的是
1、如果是基础数据类型,传的参数是那个值的复制
例:

let a = 1  
f(a)  //会把a复制一份放在形式参数里
function f(param) {

//param = 1
}

2、如果是引用数据类型
因为引用类型变量里存的是一个地址,所以会把地址复制到形参中
例如:

let a = {
	key:'哈喽'
}
//若a的保存的地址是 0X0000002
function f(param) {
 //传进来param 也保存了 0X0000002地址
	param = {   //这时param 保存的地址被修改为 0X0000005,原来a的指向并没有变
	 key: '你好'
	}
	return param
}

我认为函数传参就是复制 原变量 的栈内存的内容到 形式参数 里面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值