剖析JavaScript传值

大家都知道JavaScript中有基本类型值和引用类型值,下面我将分享这两个类型在变量的交互中的应用。实践过的,出过问题的哦~~~~

1.赋值变量的值:

【1】基本类型值

var num = 5;

var num1 = num;

实际的工作方式是:将num复制一个副本5,然后赋给num1,虽然相等,但是两个变量的值完全独立。

验证:

alert(num1);//5

alert(num+5);//10

【2】引用类型

当一个变量向另一个变量赋值引用类型时,同样也会是复制一个副本给另一个变量,但这里是复制的是指针,而这个指针指向的是堆栈中的一个对象。

如果其中一个变量发生改变,另一个也会发生改变。请看:

var obj1 = new Object();

var obj2 = obj1;

obj1.name="XXX";

alert(obj2.name);//"XXX"

2.参数传递

【1】基本类型值按值传递,这个好说。

如果变量向函数的参数传值时,被传递的值会复制给参数(ECMAScipt的arguments元素),

function addNum(num){

  num = num+10;

  return num;

}

var num = 10;

var result = addNum(num);

alert(num);//10没有变化

alert(result);//20

【2】引用类型还是按值传递!!!!!

function setName(obj){

  obj.name="XXX";

}

var man=new Object();

setName(obj);

alert(man.name);//"XXX"

到此千万不要以为是引用传递,如果这么认为的话,那你还得看下面的代码:

function setName(obj){

  obj.name="XXX";

  obj = new Object();

  obj.name="wrong";

}

var man=new Object();

setName(man);

alert(man.name);//还是"XXX"

上面的例子证实了,如果是按照引用传值的话,结果应该是“wrong”。

而实际上在函数内部重新声明一个obj只是一个局部对象,当函数执行完的时候就会销毁。

 

 

  由于本人水平有限,不能举出一些高端的例子望见谅

  如果您觉得有不对,或不全,求更正求补充。

posted on 2012-05-13 09:40  前端小蔡  阅读(2427)  评论(8编辑  收藏  举报

导航