let a = { foo: 1 }
function make(a){
a.foo = 2
a = { foo: 3 }
console.log(a)
}
make(a)//打印出{foo:3},这个结果我能接受
console.log(a);//打印出{foo“2}?这是为什么,不是再make函数里修改了变量a吗,不应该打印{foo:3}吗
结果是:
你可以通过函数的参数修改可变参数内部的变量,但你无法通过赋值直接改变外部参数
理解一下:
你可以通过函数内的变量修改a,但是当a赋值为其他对象时,函数的a和外部的a就不是一个了
其实就是值传递和引用传递的老问题了,常见语言都有这种现象。传参分为值传递和引用传递。JS里5种基本数据类型Undefined、Null、Boolean、Number 和 String是值传递,而其他诸如数组、对象都是引用传递,值传递会传递一个变量的副本,修改内部变量不会影响外部变量。而引用传递传递的是变量的引用,内部和外部共用一个引用对相同的对象进行操作。