参考: 高级程序三 page71
ES中所有函数的参数都是 按值传递。既把函数外部的值复制给函数内部的参数,把一个变量的值复制给另外一个变量。
参考:JavaScript 是传值调用还是传引用调用?

1. 传递基本类型

很好理解,按值传递, 两个变量互不影响

  1. let age = 10
  2. function add (num) {
  3. num += 10
  4. return num
  5. }
  6. var result = add(age)
  7. console.log(age) // 10
  8. console.log(result) // 20

2. 传递引用类型

因为obj 和 person都指向了同一个引用,改变了函数内部值,函数外部也反映到了外部。
这个现象很容易导致错误的认为: 参数是按引用传递的。

  1. function setName(obj) {
  2. obj.name = 'tom'
  3. }
  4. let person = new Object()
  5. setName(person)
  6. console.log(preson.name) // tom

but 看下面的例子

  1. function setName(obj) {
  2. obj.name = 'tom'
  3. obj = new Object()
  4. obj.name = 'lucy'
  5. }
  6. let person = new Object()
  7. setName(person)
  8. console.log(preson.name) //仍然是 "tom"

修改函数内部的变量,并没有影响函数外部的变量。如过person是按引用传递,则proson的name属性就应该改变。