[TOC]
>[success] # 函数参数修改全局变量的影响
<br/>
传值、传址、整个赋值修改
<br/>
>[success] ## 传值
<br/>
~~~
'函数的参数'如果是原始类型的值'(数值、布尔、字符串)',传递方式是'传值'方式,这意味着,在函数体内
修改数值,不会影响到外部
var p = 2
function f(p){
p = 3
}
f(p)
p // 2
~~~
<br/>
>[success] ## 传址
<br/>
~~~
但是,如果'传的参数'复合类型的值'(数组、对象、其他函数)',传递方式是'传址'方式,也就是说,
传入函数的原始值的地址,因此在函数内部修改参数,将会影响到原始值。
var obj = 1
function f(o) {
o.p = 2
}
f(obj)
obj.p // 2
~~~
<br/>
>[danger] ## 注意
<br/>
~~~
如果'函数内部修改的,不是某个属性,而是替换掉整个参数,这是不会影响到原始值'的
var obj = [1, 2, 3]
function f(o){
o = [2, 3, 4] // 整个替换掉是不会成功的
}
f(obj)
obj // [1, 2, 3]
~~~