js 在 按引用类型传值 在一些情况下 不起作用

举例


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;  // 对的,我能影响到 传入的对象
    ctx = ctx.data; // 案例来说 ctx 已经变成了 555才对呀为啥不起作用
    
    debugger; // ctx 555
}
let d = a({
    data: 555,
    name: 777
});
console.log(d); // {data: 555, name: 777, age: 777} ??? 我以为是 555

我有点蒙,这是按引用类型传值, b函数对 传来的对象做了更改, 加个 age属性起作用了。可是ctx = ctx.data; 不起作用我有点蒙蔽

好吧,知道了,因为 ctx = ctx.data 之后,和原对象断开了连接

就像



var obj = {}
obj = 123;

引用已经断开了联系,b函数并没有更改 ctx 对象,是更改了b函数内ctx这个变量指向,a函数依然指向原函数。

阅读 1.9k
3 个回答

已经知道答案了,
因为 ctx = ctx.data 之后,和原对象断开了连接

就像

var obj = {}
obj = 123;

引用已经断开了联系,b函数并没有更改 ctx 对象,是更改了b函数内ctx这个变量指向,a函数依然指向原函数。

var a = { name: 'a' };
var b = { name: 'b' };

var c = a; //c->a
c.name = 'a change to c';
c = b; //c->b

b中的ctx是指向a中的ctx的指针。

ctx.age = 7  // 通过指针给`ctx`定义了新的属性
ctx = ctx.data  // 给指针重新赋值
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题