函数参数传递

函数参数传递

在 JavaScript 中函数传参,分为两种:

  • 基础类型(Number、String、Boolean..)
  • 引用类型(Object、Array、Funcion..)

基础类型传参

看下面的例子:

1let str = 0; 2function log(prop) { 3 prop = 1 4 console.log(prop) 5} 6log(str)// 1 7console.log(str)// 0

比较好理解,其实就是复制了一个值传入了函数中,复制的值修改了,原值不会修改。

引用类型传参

看例子:

1let obj = { value: 0 } 2function log(prop) { 3 prop.value = 1 4 console.log(prop) 5} 6log(obj)// { value: 1 } 7console.log(obj)// { value: 1 }

给函数传了一个对象进去,然后在对象中修改属性的值,会导致原值的属性也被修改。 其实传入函数的是复制的一个对象的内存引用地址,修改对象的属性是通过复制的内存地址找到的这个对象,然后修改的是原对象上的属性。

如果将传过来的的引用地址在重新复制,是可以的:

1 2let obj = { value: 0 } 3function log(prop) { 4 prop = { value: 1 } 5 console.log(prop) 6} 7log(obj)// { value: 1 } 8console.log(obj)// { value: 0 }

将复制的引用地址 重新赋值一个新的对象,则当前赋值的这个对象(1)和传进的对象(0)就毫无关系了。

总结

所以,对于函数的参数传递,普通类型传递的是值的副本,而引用类型传递的是引用地址的副本。

参考

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

ROS回调函数传参

ROS编程过程中遇到不少需要给回调函数传递多个参数的情况,下面总结一下,传参的方法:一、回调函数仅含单个参数voidchatterCallback(conststd_msgs::String::ConstPtr&msg){ROS_INFO("Iheard:%s",msg

typeScript数据类型

//布尔类型letisDone:booleanfalse;//数字类型所有数字都是浮点数numberletdecLiteral:number6;lethexLiteral:number0xf00d;letbinaryLiteral:number0b101

js之传值与传址/undefined和null/严格模式

传值与传址基本数据类型有五种Undefined、Null、Boolean、Number和String引用数据类型有两种object,array,fn两种数据类型的区别:1.存储位置不同原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中;引用数据类型直接存