JavaScript 参数传递

227 阅读1分钟

参数传递

  • 普通值传递

  • 引用传递

  • 共享传递

普通值传递


var val = 1

function demo(v) {

  v = 2

  console.log(v) // 2

}

demo(val)

console.log(val) // 1

当值是基本数据类型的时候,就是直接复制一份传递给函数。 val => _val

引用传递


var obj = {

  val: 1

}

function demo(o) {

  o.val = 2

}

demo(obj)

console.log(obj.val) // 2

当值是复杂的数据结构 ( Object ) 的时候,copy 会产生性能问题,函数内修改会影响原来的值。

这里就有个问题,如果 o 是一个引用的话, o = 1 有没有修改原来的值? 答案是没有的

共享传递

原来,但值是复制的数据结构的时候,不是直接引用传递的,而是传递值引用的副本。 o.value = 1 就会找出引用值修改, o = 1 就会直接修改参数。

总结

javascript 只有两种传递方式:值传递共享传递(传递引用)。如果有人说 引用传递 ,你就可以反驳他了。