js 以对象形式给函数传参,基础类型还是按值传递

let test1: number = 123;
let test2: { obj1: number } = { obj1: 456 };

const testFun: Function = ({ testArg, testObj }: {
    testArg: number,
    testObj: { obj1: number },
}): void => {
    testArg = 321;
    console.log('testFun log testArg: ' + testArg);

    testObj.obj1 = 654;
    console.log('testFun log testObj: ');
    console.log(testObj);
}

testFun({ testArg: test1, testObj: test2 });
// 输出:
// testFun log testArg: 321
// testFun log testObj:
// {obj1: 654}

console.log('===============分割==============');

console.log('outter test1: ' + test1);
// 输出 123
console.log('outter test2: ');
console.log(test2);
// 输出 654

我以为 test1 在外部也会被赋值为 321,但是并没如此。
如果整体是一个对象形式传递的参数,为什么 test1 没被函数 testFun 改变呢?
请大家解答一下

阅读 1.1k
1 个回答

因为

function testFun({ a, b }){
}

等价于

function testFun(params){
    let { a, b } = params
}

等价于

function testFunc(params){
    let a = params.a,
        b = params.b;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题