ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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] ~~~