首先理解变量包括两种不同数据类型的值:1.基本类型值 2.引用类型值
基本类型值为简单的数据段,如var name="tom";
name.age=20;
alert(name.age); //undefined 不能给基本类型的值无法添加属性。
引用类型值为可能由多个值构建的对象,如var person=new Object();
person.age=20;
alert(person.age); //20 可以给基本类型的值添加属性。
函数内参数的传递:1.基本类型的值传递:function addTen(num){
num+=10;
return num;
};
var count = 20;
var result= addTen(count);
alert(count); //20 无变化
alert(result); //30
2.当传入参数的变量时按引用访问的时候: function setName(obj){
obj.name=‘jerry‘;
}
var person=new Object();
setName(person);
alert(person.name); //‘jerry‘
此处的obj和person访问的是同一个对象(new Object());即使这个变量是按值传递的,obj也会按引用来访问同一个对象。当为函数内部的obj添加属性时,外部的person也会做出改变。
3. function setName(obj){
obj.name=‘jerry‘;
obj= new Object();
obj.name=‘tom‘;
}
var person=new Object();
setName(person);
alert(person.name); //‘jerry‘
此处的obj= new Object();为obj重新定义了一个新的对象。所以obj.name=‘jerry‘和person指向同一个对象。而obj= new Object();obj.name=‘tom‘;是一个新对象的引用了,在函数执行完毕后会被销毁。