基本概念:【瞄一眼就好~~】
按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。
按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。
原始数据类型【Undefined、Null、Boolean、Number、String】&&对象类型 【Object,Array,Function,Date等】都是按照值传递的,只不过原始数据类型传递的值是原始值,即变量的值;对象类型传递的值是对象在堆内存中的内存地址。
例1:
var a1 = 1; function foo(a) { a = 2; } foo(a1); alert(a1);//1,未改变
例2:
var obj = { x : 1 }; function foo(o) { o.x = 3; } foo(obj); alert(obj.x);//3,发生改变
例3:
var obj = { x : 1 }; function foo(o) { o = 100; } foo(obj); alert(obj.x);//1,未改变
例4:
function setName(obj) { //为了便于区分,将下列三个obj分别设为obj1,obj2,obj3 obj.name = "Nicholas";//obj1 obj = 100;//obj2 obj = new Object();//obj3 obj.name = "Greg"; } var person = new Object(); setName(person); alert(person.name);//"Nicholas"
++什么是值传递?什么是引用传递?(review)
++可参考知乎文章:http://www.zhihu.com/question/27114726