码迷,mamicode.com
首页 > 编程语言 > 详细

javascript的函数传参(没有引用传递只有值传递)

时间:2014-10-21 11:50:10      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:io   ar   java   sp   on   cti   ef   bs   javascript   

var v1 = []
var v2 = {};
var v3 = {};
function foo(v1, v2, v3){
    v1 = [1];
    v2 = [2];
    v3 = {a:3}
}

foo(v1, v2, v3);
alert (v1); // 空白
alert (v2); // [object Object]
alert (v3.a); // undefined

/*由此可见:v1、v2、v3 都没有被改变,v1 仍然是零个元素的数组,v2、v3 仍然是空白的对象。(说明不是引用传递)
*但是,数组、对象等按值传递,是指变量地址的值。
*数组、对象等的按值传递与数字、字符串还是有所不同的。数字、字符串是把值直接复制进去了,而数组、对象是把变量地址复制进去的
*前面我们让 v1、v2、v3 作为参数进入函数后,就有了地址副本,这些地址副本的指向和外面的 v1、v2、v3 *的地址指向是相同的。但我们为 v1、v2、v3 赋了值,也就是说我们把地址副本的指向改变了,指向了新的数组和对象。这样内部的 *v1、v2、v3 和外部的 v1、v2、v3 就完全断了。
*如果我们不赋新值,而是直接操作它,那么,它操作到的,仍然是和外面的 v1、v2、v3 指向的同一块数组或对象。
*/
var v1 = []
var v2 = {};
var v3 = {a:0};
function foo(v1, v2){
    v1.push (1);
    v2.a = 2;
    v3.a = 3;
}
foo(v1, v2, v3);
alert (v1); // 1
alert (v2.a); // 2
alert (v3.a); // 3
//注意出现同名函数的时候前一个将会被覆盖,覆盖发生在加载过程中,在执行的时候整个文档就相当于只剩下后面一个函数了

javascript的函数传参(没有引用传递只有值传递)

标签:io   ar   java   sp   on   cti   ef   bs   javascript   

原文地址:http://www.cnblogs.com/cdwp8/p/4039648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!