参数传递
-
普通值传递
-
引用传递
-
共享传递
普通值传递
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 只有两种传递方式:值传递、共享传递(传递引用)。如果有人说 引用传递 ,你就可以反驳他了。