JavaScript 语言中,函数调用时候参数的传递是"值传递"还是"引用传递" ?

在 JavaScript 语言中 ,函数参数传递的是「值」而非「引用」,即我们使用的是值传递的方式,关于这一点,我们可以通过下面这段简短的代码来进行说明。

/* 1、变量声明 */
let x = 100; /* 2、函数声明 */
function changeX(x) {
x = 200;
} /* 3、函数调用 */
changeX(x); /* 4、打印输出 */
console.log(`x = ${x}`); /* x = 100 */ /* +++++++++++++= */ /* 测试代码-A */
let o1 = { name: "Yong" }; function change_A(o1) {
/* 注解:此处的o1为函数内部的局部参数(临时变量) */
o1.name = "Xia"
}
change_A(o1);
console.log(`o = `, o1); /* o1 = { name: 'Xia' } */ /* 测试代码-B */
let o2 = { name: "Yong" }; function change_B(o2) {
/* 注解:此处的o2为函数内部的局部参数(临时变量) */
o2 = { age: 18 };
}
change_B(o2);
console.log(`o = `, o2); /* o = { name: 'Yong' } */

在上面的代码中,有几个点需要进行说明。在 changeX() change_A() change_B()中的x | o1 | o2这三个变量用的都是形参,也就是说函数内部的这三个变量都是局部变量,它们区别于外部的全局变量是临时的。当函数调用时通过 实参 ——> 形参 来创建和赋值,函数执行完后这些局部变量就会被销毁。

函数调用时候都做了些什么?

[1] 把实参的值赋值给形参,相当于在函数中执行下面的代码
let x = x; <!-- 把 x 这个变量保存的内容(数字-100)拷贝一份给左边变量存储 -->
let o1 = o1; <!-- 把 o1 这个变量保存的内容(指针-对象)拷贝一份给左边变量存储 -->
let o2 = o2; <!-- 把 o2 这个变量保存的内容(指针-对象)拷贝一份给左边变量存储 -->
[2] 执行函数体中的代码

通过/* 测试代码-A *//* 测试代码-B */的对比,我们可以知道JavaScript 函数是值传递的,如果 JavaScript 函数是引用传递的,那么/* 测试代码-B */执行后打印的结果应该是o = { age: 18 }

前端开发系列118-进阶篇之Call by sharing(值传递还是引用传递)的更多相关文章

  1. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  2. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  3. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  4. ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  5. 死磕面试系列,Java到底是值传递还是引用传递?

    Java到底是值传递还是引用传递? 这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意. 可能很多同学能够很轻松的背出JVM.分布式事务.高并发 ...

  6. 【webpack 系列】进阶篇

    本文将继续引入更多的 webpack 配置,建议先阅读[webpack 系列]基础篇的内容.如果发现文中有任何错误,请在评论区指正.本文所有代码都可在 github 找到. 打包多页应用 之前我们配置 ...

  7. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  8. 旨在脱离后端环境的前端开发套件 - IDT Server篇

    IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...

  9. 前端开发【第2篇:CSS】

    鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...

  10. [置顶]【实用 .NET Core开发系列】- 导航篇

    前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...

随机推荐

  1. doctrine 与 mysql 数据类型的详细转换规则。

    doctrine 与 mysql 数据类型的详细转换规则 // mysql -> doctrine array( 'tinyint' => 'boolean', 'smallint' =& ...

  2. 开发者专用部署工具PasteSpider的V5正式版发布啦!(202504月版),更新说明一览

    PasteSpider是一款以开发者角度设计的部署工具,支持把你的项目部署到Windows或者Linux服务器,支持5大模式Windows(IIS/Service),Linux(systemd),Do ...

  3. k8s-1.18.0版本-kubeadmin部署(提供阿里云镜像)(二)master节点

    k8s-1.18.0版本-kubeadmin部署 (提供阿里云镜像) 个人服务器地址:http://101.201.140.7/wp-blog/ 系统开启kube-proxy的ipvs前置条件 从k8 ...

  4. EF core番外——EF core 输出生成的SQL 到控制台

    ----------------版权声明:本文为CSDN博主「爱睡觉的程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.cs ...

  5. 关于μkeil v5.40(keil5) 如何使用STM32(ARM)虚拟下载器进行Proteus联调

    最近我心血来潮,想用Proteus+keil5进行联调,但仔细在网上一找,全是某SDN扒下来的陈年老黑X,都快转出数字包浆了还在用,完完全全跟不上时代,也全是51单片机的版本,STM32(ARM)根本 ...

  6. 74.8K star!这个开源图标库让界面设计效率提升10倍!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 Font Awesome 是全球最受欢迎的图标库和工具包,提供超过2000个免费图标和700 ...

  7. uv全功能更新:统一管理Python项目、工具、脚本和环境的终极解决方案

    花下猫语:uv 项目自发布起就大受欢迎,目前 Github star 52.6 K,远超过它的同类竞品们.前不久,它的创始人在 X 上披露了一组惊人的数据:uv 曾占据了 PyPI 超过 20% 的流 ...

  8. Python基础 - 控制结构

    控制结构: 顺序, 分支, 循环, 理解了, 其实编程就入门一半了. 条件表达式 条件表达式的值只要不是:0 . None. False. 空列表. 空元组. 空集合. 空字典. 空字符串. 空ran ...

  9. 第1.2讲、从 RNN 到 LSTM 再到 Self-Attention:深度学习中序列建模的演进之路

    处理序列数据(如文本.语音.时间序列)一直是深度学习的重要课题.在这个领域中,我们从 RNN(Recurrent Neural Network)出发,经历了 LSTM(Long Short-Term ...

  10. 「Note」图论方向 - 图论进阶

    1. 2-SAT 1.1. 介绍 对于一些节点,每个节点存在两个状态(非 \(0\) 即 \(1\)),我们给出一些如下类型的限制条件: 节点 \(i\) 状态为 \(1/0\). 若节点 \(i\) ...