基本数据类型是传值,存放在栈中
引用数据类型(数组,对象和函数)是传址,值存放在堆中,栈中存放的是地址
先讲讲赋值的操作:
var a = 10;
var b = a;
a = 20;
console.log(a, b); //20 10
a先是被赋值为1,接着把a的值赋给b, 这时会进行值的拷贝,因此b=1;然后又把a赋值为2.
下例是引用类型赋值操作:
var aTest1=['Dylan',"Tong","Xue"],aTest2=aTest1,aTest1=[1,2,3];
console.log('aTest1='+aTest1+",aTest2="+aTest2);
引用类型赋值并不会真正重新拷贝引用值,而是拷贝引用的地址。注:图中原来的值用Old表示,重新赋过的值用New.
aTest1与aTest2是引用同一个地址,至到aTest1被重新指向[1,2,3]才改变了aTest1的引用地址。
aTest1与aTest2是引用同一个地址,所以如果修改了aTest1[1], aTest2[1]的值也会被修改。
当参数为原始类型时,是直接拷贝其值,而为引用类型时是拷贝其引用的地址。
var a=1,b=2;
function f1(arg1,arg2){
arg1=28,arg2=2;
console.log(arg1+" "+ arg2);
}
f1(a,b);
console.log(a+" "+b);
var aTest1=[10,11,12],aTest2=['hello','world'];
console.log('aTest1='+aTest1+",aTest2="+aTest2);
function f2(arg1,arg2){
arg1[1]='dylan',arg2[1]='dylan';
console.log(arg1+" "+arg2)
}
f2(aTest1,aTest2);
console.log('aTest1='+aTest1+",aTest2="+aTest2);
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!