再次学习javascript中的參数传递

 javascript中的全部函数的參数传递都是依照值传递的,做了以下測试:

  

function addTen(num){
	num +=10;
	return num;
}

var count = 20;
var result = addTen(count);
alert(cont);		//20
alert(result);	//30
  好吧。上面仅仅是做了基本类型的传递,再做个引用类型的传递看看:

function setName(obj){
	obj.name="Mark";
}

var person = new Object();
setName(person);
alert(person.name);		//Mark
这样看起来是引用传递,不是值传递,那么再做个測试:

function setName(obj){
	obj.name="Mark";
	obj = new Object();
	obj.name = "David";
}

var person = new Object();
setName(person);
alert(person.name);		//Mark
这个样例与前面一个样例的唯一的差别就是在setName()的函数后面添加 了两行代码:一行代码为obj又一次定义了个对象。还有一行代码为该对象定义了一个带有不同值的name属性。在把persion传递给setName()函数后,其name属性被设置为Mark,然后将一个新对象赋值给obj,同一时候其name属性设置为David。假设person是依照引用传递的,那么person就会自己主动被改动为指向其name属性值为David的新对象。可是,当接下再訪问person.name时。显示的值仍是Mark。这说明即使在函数内部改动了參数的值。但原始的引用仍然保持未变。实际上。当在函数内部重写obj时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数运行完后被销毁。


猜你喜欢

转载自www.cnblogs.com/ldxsuanfa/p/9944851.html