JavaScript的参数是按照什么⽅式传递的?

基本数据类型传递方式

由于js中存在复杂类型基本类型,对于基本类型而言,是按值传递的

    var a = 1; 
    function test(x) {
        x = 10; 
        console.log(x); 
    }
    test(a); // 10 
    console.log(a); // 1

虽然在函数 testa 被修改,并没有有影响到 外部 a 的值,基本类型是按值传递的.

复杂类型按引用传递?

我们将外部 a 作为⼀个对象传⼊ test 函数.

    var a = { a: 1, b: 2 };
    function test(x) { 
        x.a = 10; 
        console.log(x); 
    }
    test(a); // { a: 10, b: 2 } 
    console.log(a); // { a: 10, b: 2 }

可以看到,在函数体内被修改的a对象也同时影响到了外部的a对象,可⻅复杂类型是按引⽤传递的.

可是如果再做⼀个实验:

    var a = {
        a: 1,
        b: 2
    }; 
    function test(x) {
        x = 10; 
        console.log(x); 
    }
    test(a); // 10 
    console.log(a); // { a: 10, b: 2 }

外部的 a 并没有被修改,如果是按引⽤传递的话,由于共享同⼀个堆内存, a 在外部也会表现为 10 才对. 此时的复杂类型 同时表现出了按值传递按引⽤传递的特性

你可能感兴趣的:(javascript)