参考: 高级程序三 page71
ES中所有函数的参数都是 按值传递。既把函数外部的值复制给函数内部的参数,把一个变量的值复制给另外一个变量。
参考:JavaScript 是传值调用还是传引用调用?
1. 传递基本类型
很好理解,按值传递, 两个变量互不影响
let age = 10
function add (num) {
num += 10
return num
}
var result = add(age)
console.log(age) // 10
console.log(result) // 20
2. 传递引用类型
因为obj 和 person都指向了同一个引用,改变了函数内部值,函数外部也反映到了外部。
这个现象很容易导致错误的认为: 参数是按引用传递的。
function setName(obj) {
obj.name = 'tom'
}
let person = new Object()
setName(person)
console.log(preson.name) // tom
but 看下面的例子
function setName(obj) {
obj.name = 'tom'
obj = new Object()
obj.name = 'lucy'
}
let person = new Object()
setName(person)
console.log(preson.name) //仍然是 "tom"
修改函数内部的变量,并没有影响函数外部的变量。如过person是按引用传递,则proson的name属性就应该改变。