美文网首页
值传递or引用传递

值传递or引用传递

作者: 妙言Lisa | 来源:发表于2016-12-20 21:41 被阅读0次

javascript都是按值传递

javascript的函数的参数传递,传递的都是值,参数是 Object 类型的也一样,也是值,只不过这个值是地址值。

function setName(obj){
    // 这里 obj 和 person 指向内存中的同一块地址,a 地址
    obj.name="Nicholas";

    // 这里 obj 指向了新对象所在的地址( b 地址),切断了和 a 地址的联系
    obj=new Object();
    obj.name="Greg";
    console.log(obj.name);  //输出Greg
}
var person =new Object();
setName(person);
alert(person.name);  //弹出Nicholas

以上例子:如果函数的参数是按引用传递的话, person 也会指向地址 b , 然而事实上 person 指向的是地址 a 。

例子

再用一个具体的例子说明:

var arr = [1, 2, 3, 4]
var str = '1234'

function guangboticao7 (input) {
  input = input + '5678'
  console.log('时代在召(zhaò)唤', input)
  return input;
}

function guangboticao8 (input) {
  return input.push([5, 6, 7, 8])
}

function guangboticao9 (input) {
  input = '2234'
  return [input].concat([5, 6, 7, 8])
}

console.log('第七套广播体操', guangboticao7(str), str)
// 做完 第七套广播体操 是怎样一种体验?

console.log('第八套广播体操', guangboticao8(arr), arr)
// 做完 第八套广播体操 是怎样一种体验?

console.log('第九套广播体操', guangboticao9(arr), arr)
// 做完 第九套广播体操 是怎样一种体验?

结果为

第七套广播体操,12345678,1234
//因为元数据类型Primitive data type ( number, string, boolean, null, undefined )传递是值传递,不会影响本身

第八套广播体操,5,[1,2,3,4,[5,6,7,8]]
//传入的是数组arr指向的地址,并在这个地址上修改了其属性,因此会对外部arr造成影响

第九套广播体操,[2234,5,6,7,8],[1,2,3,4,[5,6,7,8]]
//虽然传入了数组arr指向的地址,但是重新赋值后,input指向一个新地址,切断了和arr的关系,因此不会对外部arr造成影响

参考资料和案例来源:

  1. 知乎问答
  2. 知乎专栏文章

相关文章

  • Day12-Java

    值传递和引用传递 值传递是值的拷贝, 引用传递是引用的拷贝 String 类型是引用类型, new String ...

  • Java中的参数传递

    为了便于理解,会将参数传递分为按值传递和按引用传递。按值传递是传递的值的拷贝,按引用传递传递的是引用的地址值,所以...

  • Java所有参数-对象引用及基本类型值--都是值传递

    前言 当前主要存在两种传递方式,值传递和引用传递,先简单介绍值传递和引用传递值传递(pass by value)是...

  • JS是按值传递还是按引用传递?

    JS是按值传递还是按引用传递? 按值传递 VS. 按引用传递 探究JS值的传递方式 按共享传递 call by s...

  • Go语言学习笔记(三)

    指针 Go的指针不能运算 参数传递 Go的参数传递是值传递(值传递:开辟新的空间,拷贝传递参数的值,引用传递:引用...

  • 聊聊Java内部类

    一.磨叽磨叽Java值传递与引用传递 “在Java里面参数传递都是按值传递”即:按值传递是传递的值的拷贝,按引用传...

  • Java值传递

    “在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • 值传递&引用传递

    值传递: 方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相...

  • 值传递,引用传递

网友评论

      本文标题:值传递or引用传递

      本文链接:https://www.haomeiwen.com/subject/vaxfvttx.html