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关键字的使用.
最新评论