夜猫的个人小站

       继续码起来

关于作者

微博北极熊硬糖
北京海淀区

js函数值传递问题

标签   js

情况一:

var bb=1;
function aa(bb){
    bb=2;
    console.log(bb);
}
aa(bb);//2
console.log(bb);//1

情况二:

var bb=1;
function aa(){
    bb=2;
    console.log(bb);
}
aa(bb);//2
console.log(bb);//2

情况三:

var bb={c:1};
function aa(bb){
    bb={c:2};
    console.log(bb);
}
aa(bb);//Object{c:2}
console.log(bb);//Object{c:1}

情况三:

var bb={c:1};
function aa(bb){
    bb.c=2;
    console.log(bb);
}
aa(bb);//Object{c:2}
console.log(bb);//Object{c:2}

分析情况一,我们注意函数参数传递基本类型时是值传递,相当于内部重新声明了一个变量

var bb;bb=arguments[0].

重新申请了块存储单元。所以内部bb和外部bb没有关系

分析情况二,函数没有设置参数,内部bb未加var ,所以默认是window.bb.所以内部修改其值会影响外部bb。其实就是同一个bb.

分析情况三和四,由于传递的是引用型数据:对象.根据情况一分析,内部bb得到的是外部bb的指针,指向真正存储数据{c:1}的地方。情况三里直接修改bb,那局部变量bb的值变了,和外部无关。而情况四里的修改的是bb.c=2.其修改的是bb指针指向的数据。也就是外部bb指向的数据。所以外部bb的值被修改了。

综上。我们要注意参数传递的类型,以及var关键字的使用.

最新评论

发表评论
回到顶部