美文网首页
关于JS传递参数是按值传递的理解

关于JS传递参数是按值传递的理解

作者: xiaoguo16 | 来源:发表于2017-07-30 16:44 被阅读0次

今天看JS高程第四章时,里面讲到函数参数是按值传递的,当时有点不能理解,但是想了一会,豁然开朗。
其实只要理解了什么是按值传递,什么是按引用传递即可理解。
按值传递:传递的是副本,所以修改形参不会影响实参。
按引用传递:传递的是实参本身,而非副本。
而JS在传递参数时,会有一个临时变量来存放该参数,这个临时变量存放的是参数的副本。

  • 对于基本类型值来说,这个临时变量存放的就是这个基本类型值的副本。对这个参数的操作不会影响实参。如:
var num=2;
function  add(a){
   a=a+2;
  return a;
 }
console.log(add(num))//4
console.log(num)//2

由于形参a存放的是num的副本,也就是形参a会将num的值复制过来,然后进行操作。所以num的值不受其影响。

  • 对于引用类型值来说,这个临时变量存放的是地址的副本。如:
var obj={name:"gly"};
function changeName(a){
  a.name="lq";
  return a.name;
}
console.log(changeName(obj))//"lq"
console.log(obj.name)//"lq"

因为参数a和obj是同一个地址,所以他们指向的都是同一个对象,因此对对象的修改也就反应到了obj中。
再来一个例子:

var obj={name:"gly"};
function changeName(a){
  a.name="lq";
  a=new Object();
  a.name="aaa"
  return a.name;
}
console.log(changeName(obj))//"aaa"
console.log(obj.name)//"lq"

这个例子中由于对参数a赋值了一个新的对象,这样它的地址也就改变了,所以对它的属性的修改不会影响obj,因为他俩地址不同,指向的不是一个对象。

所以说,不管传入的参数是基本类型还是引用类型,它们都是副本,只是一个是值的副本,一个是地址的副本。
综上,JS传递参数其实可以看作是先进行变量的复制,再进行操作。而复制时,由于基本类型和引用类型的不同,所以复制的东西不同,对于基本类型,复制的是值,对于引用类型,复制的是地址。

相关文章

  • 关于JS传递参数是按值传递的理解

    今天看JS高程第四章时,里面讲到函数参数是按值传递的,当时有点不能理解,但是想了一会,豁然开朗。其实只要理解了什么...

  • Java中的参数传递

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

  • 2019-06-26

    深入理解JavaScript 参数按值传递 定义:ECMAScript中所有函数的参数都是按值传递的。 值传递:函...

  • js中经典问题讲解

    1.传递参数是按值传递还是按引用传递? 苏墨橘的回答JS是按值传递还是按引用传递? 2.执行环境及作用域 《jav...

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

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

  • 方法参数

    一、参数传递 1.参数传递有两种类型:按值传递和按引用传递。 2.按值传递指变量使用的是参数传递的值,而按引用传递...

  • 第四题

    写出输出值,并写出原因 按值传递和按引用传递 函数的参数的按值传递的 js之所以有这样设计,是因为:按值传递的类型...

  • 按值传递与按引用传递

    按值传递 -- 传递的是参数的值,即参数本身。 按引用传递 -- 传递的是指向参数的值的引用(指针),而不是参数的...

  • 再学JS--函数参数传递类型

    JavaScript的函数参数传递分为按值传递、按引用传递以及按共享传递。 按值传递 什么是按值传递? 把函数外部...

  • Java按值还是引用传参

    Java的方法参数是按值传递的 基本类型传递的是字面值,引用类型传递的是地址值。也可以理解成,基本类型按值传递,引...

网友评论

      本文标题:关于JS传递参数是按值传递的理解

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