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

IllIIlIlIII
  • 8
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 改变呢?
请大家解答一下

回复
阅读 209
1 个回答

因为

function testFun({ a, b }){
}

等价于

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

等价于

function testFunc(params){
    let a = params.a,
        b = params.b;
}
宣传栏