javascript基础:函数传参方式
先分析以下逻辑输入什么:
let a = {
name:'a',
age:12
}
function change(o){
o.age = 18
o = {
name:'b',
age:49
}
return o
}
let b = change(a)
console.log(a.age)//18
console.log(b.age)//49
涉及内容:
1.按值传递(call by value),按引用传递(call by reference),按共享传递(call by sharing)
(1)按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。
(2)按引用传递(call by reference),函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。
(3)对象类型按共享传递的(call by sharing,也叫按对象传递、按对象共享传递),是JS中的对象类型传递方式(该求值策略被用于Python、Java、Ruby)。
该策略的重点是:调用函数传参时,函数接受对象实参引用的副本(既不是按值传递的对象副本,也不是按引用传递的隐式引用)。
它和按引用传递的不同在于:在共享传递中对函数形参的赋值,不会影响实参的值。
2.深克隆和浅克隆
总结: 值传递不会被修改;对象传递,本身不会被修改,但属性值可以被修改且只能通过属性修改。