舉例var a = function (ctx) { debugger // ctx {data: 555, name: 777}
b(ctx); debugger; // ctx {data: 555, name: 777}
return ctx;
}var b = function (ctx) {
ctx.age = 7; // 對(duì)的,我能影響到 傳入的對(duì)象
ctx = ctx.data; // 案例來(lái)說(shuō) ctx 已經(jīng)變成了 555才對(duì)呀為啥不起作用
debugger; // ctx 555}let d = a({ data: 555, name: 777});console.log(d); // {data: 555, name: 777, age: 777} ??? 我以為是 555我有點(diǎn)蒙,這是按引用類(lèi)型傳值, b函數(shù)對(duì) 傳來(lái)的對(duì)象做了更改, 加個(gè) age屬性起作用了??墒莄tx = ctx.data; 不起作用我有點(diǎn)蒙蔽好吧,知道了,因?yàn)?nbsp;ctx = ctx.data 之后,和原對(duì)象斷開(kāi)了連接就像var obj = {}obj = 123;引用已經(jīng)斷開(kāi)了聯(lián)系,b函數(shù)并沒(méi)有更改 ctx 對(duì)象,是更改了b函數(shù)內(nèi)ctx這個(gè)變量指向,a函數(shù)依然指向原函數(shù)。
js 在 按引用類(lèi)型傳值 在一些情況下 不起作用
繁華開(kāi)滿天機(jī)
2019-02-03 22:38:22