函数的形参也可以看作是一个变量。

当我们把一个值类型(简单类型)变量作为参数传给函数的形参时,其实是把变量在空间里的值复制了一份给形参,在方法内部对形参做任何修改,都不会影响到外部的变量。

function fn(a) {
    a++;
    console.log(a);
}
var x = 10;
fn(x);            // 输出 11
console.log(x);        // 输出 10

当我们把复杂类型的变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,实参和形参其实保存的是同一个堆地址,操作的是同一个对象。

function Fruit(name) {
    this.name = name;
}

function fn(x) {
    console.log(x.name);
    x.name = 'Apple';
    console.log(x.name);
}

var b = new Fruit('Banana');
console.log(b.name);    // Banana
fn(b);            // 输出 Banana 和 Apple
console.log(b.name);    // Apple

BlueBlue
10 声望1 粉丝

前端新手一枚