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
}
我认为函数传参就是复制 原变量 的栈内存的内容到 形式参数 里面