JS函数传参时:值传递与引用传递的区别?

值传递:值传递的数据为基本数据类型,基本数据类型在内存中存放的是数值本身;值传递为单向传递,只能由实参传递给形参。
引用传递:引用传递的数据为复杂数据类型,复杂数据类型在内存中存放的是地址,再根据地址找到数值。

先举两个简单的例子:

  1. 基本数据类型:number、string、boolean、null、undefined

    基本数据类型采用值传递
    例1:number类型

    解释:a和b的值不一样是因为:基本数据类型在内存中存放的是数值本身,将a的数值直接拷贝给了b,此时b=10,紧接着,又将20赋给了b,对b进行了覆盖,此时b=20,可以看出对b的操作并没有影响到a的值.

  2. 复杂数据类型:object(数组、对象)、function
    复杂数据类型采用引用传递
    例2:Array

    解释:两个数组的值一样是因为:arr1将指向数据的地址拷贝给了arr2,此时arr1和arr2拥有相同的地址,arr1和arr2的地址指向了同一组数据,则改变arr2中的数据,arr1中的数据也会发生变化

  3. JS函数传参时:值传递与引用传递的区别
    值传递为单向传递,只能由实参传递给形参,形参无法改变实参的值。
    例3:值传递

    解释:a1是实参,a2为形参,基本数据类型在内存中存放的是数值本身,函数调用时,将实参a1的数值传递给了形参a2,在函数中,给a2重新赋值,a2的值为20并返回,没有影响到a1的值.

    例4:引用传递

    解释:obj1为实参,Obj2为形参,函数调用时,obj1将存放数据的地址传递给了Obj2,此时obj2存放的是地址,不是值,则obj1和Obj2拥有相同的地址,obj1和Obj2的地址指向了同一组数据,在函数中,改变了obj2指向的数据,obj1中的数据也会发生同样的变化。

    注意:在定义函数时,若没有出现函数调用时,形参并不占用内存单元,只有在调用函数时,系统才会为其开辟空间,在调用结束后,形参所占内存单元会被销毁。

论JS函数传参时:值传递与引用传递的区别相关推荐

  1. JS函数传参时:值传递与引用传递的区别

    JS函数传参时:值传递与引用传递的区别 一.先分析基础数据与复杂数据的区别 : 基本数据类型:Undefined.Null.Boolean.Number.String 引用数据类型:对象 如:var ...

  2. js函数传参时:值传递和引用传递的区别

    值传递是单向的传递,只能由实参传递给形参,而不能由形参传递给实参,因为值传递的数据,地址和值是一个内容,所以修改形参的数据不会影响到实参的数据.所以形参的改变不会影响到实参. 值传递就是在函数调用中函 ...

  3. JS中函数传参按照值传递

    ES语法中所有函数的参数都是按值传递的. 探讨函数参数按值传递问题: //1.参数被赋值为原始值 function add(num){num += 10;return num; } let count ...

  4. python调用函数传参时、有默认值的在中间 报错了_python的大坑:使用空列表作为默认参数,让我怀疑遇到了灵异代码...

    在python中,不要使用列表或者其他可变类型的数据容器作为默认参数.否则你很可能会遇到奇奇怪怪的问题. 如果你在调用某一个函数时,传了同样的参数,手动执行,每次结果都正确.但是用循环遍历重复多次执行 ...

  5. js函数 传参 解密

    js 中的函数我们用了太多太多次了,但是关于函数的参数今天还是要说道说道. 1.js函数的参数分为两种,一种是显示参数,一种为隐式参数. 显示参数:在函数定义时列出 隐式参数:在函数调用时传递的参数值 ...

  6. js 函数传参实参包含路径“\”处理

    var test = "D:\blockchain\webapps\uxdm\WEB-INF\classes\com";                    //包含路径的实参 ...

  7. Java深入学习系列之值传递Or引用传递?

    我们来看一个新手甚至写了多年Java的朋友都可能不是十分确定的问题: 在Java方法传参时,究竟是引用传递还是值传递? 为了说明问题, 我给出一个非常简单的class定义: public class  ...

  8. C++ 传参时传内置类型时用传值(pass by value)方式效率较高

    来源:唐磊的个人博客<C++ 传参时传内置类型时用传值(pass by value)方式效率较高> 在<Effective C++>里提到对内置(C-like)类型在函数传参时 ...

  9. 函数传参字典_Python 函数参数解包

    做一个简单.明亮.快乐的手艺人. 函数参数解包(Function Argument Unpacking)是在函数传参时将iterable参数对象中的元素解包出来的一种技术. 想象一个场景,当函数所有实 ...

最新文章

  1. SQL 解决从分组数据中总是挑选第一条数据的问题
  2. JSF框架在NetBeans下的编码
  3. C#实现枚举的相关操作
  4. codeforces 600D Area of Two Circles' Intersection
  5. 什么是地址译码 理解二进制编码
  6. 探秘HDFS —— 发展历史、核心概念、架构、工作机制 (上)| 博文精选
  7. 飞鸽传书官方网站 创立黑马程序员训练营
  8. Tree(HDU-5060)
  9. Python3.6连接mysql(一)
  10. senet-运行和结构篇
  11. c++ 中 define
  12. h5移动端flexible源码适配终端解读以及常用sass函数
  13. epoll nio区别_什么是BIO,NIO与AIO
  14. 网络安全工具100强介绍与下载
  15. 怎样让照片变得更清晰,这几个方法真的好用!
  16. linux下 软件安装与卸载(3)
  17. 学物联网必须要知道的云平台ThingsBoard
  18. 大型Excel插件SqlCel全新上市
  19. 后处理-SAO原理分析及代码实现
  20. 心理学:为什么聪明人更容易患有抑郁症

热门文章

  1. 关于数据库调优,看这些就够了
  2. Selenium基础 — 键盘操作
  3. linux使用find命令快速查找文件
  4. 恒源云(GPUSHARE)_人工智能行业 | AI+教育,虚实之间
  5. JS跳转页面的几种方法
  6. 计算机学院吴琴,CCF@U413:陶建华走进成都信息工程大学
  7. 国行版 P30 价格公布,除了拍照逆天,这些功能也很强
  8. 时区转换,时间格式转换
  9. GetRandomReachablePointInRadius和GetRandomPointInNavigableRadius
  10. JavaSE入门学习30:Java常用类之包装类