我们都知道javascript的基础数据类型有: UndefinedNullBooleanNumberString

如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把值复制到为新变量分配的位置上。

  • code
var num1 = 1;
var num2 = num1; // 1
num2 = 5; // 5
console.log(num1) // 1

此后,这两个变量可以参与任何操作而不会相互影响。

  • 函数传参有有区别吗?
var a = 5

function b(num) {
num = 4
return num
}
b(a); //4
a; //5
  • 注意这只是基本数据类型, 如果改成引用类型会怎么样?
var p1 = {
name: "Tom"
} function b(obj) {
obj.name = "Jerry"
return obj
}
b(p1) // { name : "Jerry"}
p1.name // Jerry
栈内存 堆内存
p1, obj 指针地址 { name :"Tom" }
 obj.name = "Jerry"

obj修改了堆内存里的name值, p1还是指向那个地址. 所以p1跟着变了.

  • 这样会怎么样?
var p1 = {
name: "Tom"
} function b(obj) {
obj.name = "Jerry"
obj = {}
obj.name = "Jack"
return obj
}
b(p1) // { name : "Jack"}
p1; // { name: "Jerry" }

看到结果按照上面的意思应该p1也是{ name : "Jack"}但是为什么不同呢?

1 . 先修改了共同指向的堆内存里的name值

  • 第一步
栈内存 堆内存
p1, obj 指针地址 { name :"Tom" }
  • 第二步
栈内存 堆内存
p1, obj 指针地址 { name :"Jerry" }

2 . obj重新赋值引用类型,其实就是改变了obj的指针,并没有改变p1的指针指向的地址里的值

  • 第三步
栈内存 堆内存
p1 指针地址 { name :"Jerry" }
obj 指针地址 { }
  • 第四步
栈内存 堆内存
p1 指针地址 { name :"Jerry" }
obj 指针地址 { name: "Jack" }

javascript深入参数传递的更多相关文章

  1. JavaScript 函数参数传递到底是值传递还是引用传递

    tips:这篇文章是听了四脚猫的js课程后查的,深入的理解可以参看两篇博客: JavaScript数据类型--值类型和引用类型 JavaScript数据操作--原始值和引用值的操作本质 在传统的观念里 ...

  2. JavaScript函数参数传递

    Hello,今天和大家分享下JS中的一个基本概念:函数参数传递! 先来看看一个DEMO var str="hello world"; function func(s){ s=&qu ...

  3. JavaScript变量和作用域

    认识JavaScript中的变量 JavaScript中的变量有两种类型,一种是基本类型.一种是引用类型. 基本数据类型:Defined,Null,Boolean,Number,String.注意St ...

  4. JavaScript入门培训材料(Copy至此以作备份)

    JavaScript简明学习教程 2014年5月31日 目录 一.说明... 2 二.准备知识... 2 (一)HTML. 2 (二)DOM.. 3 三.JavaScript简介... 3 四.Jav ...

  5. 学习笔记:JavaScript传参方式———ECMAScript中所有函数的参数都是按值传递

    我们把命名参数(arguments)视为局部变量,在向参数传递基本类型值时,如同基本类型变量的复制一样,传递一个副本,参数在函数内部的改变不会影响外部的基本类型值.如: function add10( ...

  6. Javascript二(函数详解)

    一.函数            Javascript是一门基于对象的脚本语言,代码复用的单位是函数,但它的函数比结构化程序设计语言的函数功能更丰富.JavaScript语言中的函数是"一等公 ...

  7. javascript变量浅析

    变量声明 javascript 使用var + 变量名 声明变量,因为javascript是弱类型语言, 所有我们可以随意更改已有变量的类型. var b=1; b='2', 另外不同于c#中的var ...

  8. 常用javascript内置对象——String对象

    创建 String 对象的语法: 1:new String(s); :2:String(s); :3:直接赋值 String中属性 String中方法 <script> window.on ...

  9. JS 中没有按地址(引用)传递,只有按值传递

    很多人,包括我,受书本知识消化不彻底的影响,认为 JS 中参数有两种传递方式:数字.字符串等按值传递:数组.对象等按地址(引用)传递.对此种观点,我们要谨慎. var v1 = [] var v2 = ...

  10. Octopus系列之一些问题的汇总

    1._WidgetCart.html中的数量更新函数和删除函数,转移到MyShoppingCart.html中出错 如果你使用的是jQuery的方式banding函数 比如change 和click, ...

随机推荐

  1. ansible自定义模板部署apache服务

    使用Ansible来部署Apache服务是一个很好的选择,因为它可以自动化部署过程,确保所有的服务器上都有相同的配置.以下是一个简单的步骤指南,展示如何使用Ansible来部署Apache服务: 1 ...

  2. Pageoffice6 实现后台生成单个PDF文档

    在实际项目中经常遇到这样的场景,客户希望后台动态生成PDF文档,目前网上有一些针对此需求的方案,如果您想要了解这些方案的对比,请查看后台生成单个Word文档中的"方案对比". Pa ...

  3. 微信H5分享不能展示卡片问题

    来源与微信开放社区 微信H5已成功接入,微信api以及配置项验证正常,通过手机微信里面链接打开页面进行分享,分享出去的还是链接, 需要从以下场景进入才可以正常分享卡片 从二维码进入 分享卡片进入 公众 ...

  4. video2blog 视频转图文AI小工具正式开源啦

    前言 最近对一些小细节做了很多处理,但是其实还是有非常多的问题,没办法时间毕竟时间有限.为什么在这个时候开源,因为主要功能可以全部跑通了,分支暂时没开发的功能也可以通过其他的工具来替代. 这个工具开发 ...

  5. Maven到底是什么

    Maven 是一个项目管理工具,它最主要的两个功能就是:依赖管理和项目构建. 何为依赖管理 ​ 在传统项目中,我们的项目如果需要第三方提供的库就必须得去官网上下载,有了Maven我们只需要在pom文件 ...

  6. starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.

    在线求解[已解决] 问题 D:\persioninto_exe\soft\jdk1.8.0_322\bin\java.exe -XX:TieredStopAtLevel=1 -noverify -Ds ...

  7. 必应每日一图url(可直接使用)

    必应每日一图url 首先放出地址,后面是一堆心路历程(一堆废话),只为链接的可以不用看 https://baotangguo.cn:8081/ 最初 ​ 博客园装饰的时候(虽然是抄的),想着上面背景图 ...

  8. ros2 foxy订阅话题问题

    代码片段 这部分代码在galactic版本编译是OK的,可在foxy下编译就出了问题 TeleopPanel::TeleopPanel(QWidget* parent) : rviz_common:: ...

  9. C#笔记 窗体练习:海康相机SDK二次开发

    第一次写窗体应用程序,太闲了,给自己找点事情做... 1. 最基本的打开关闭 代码:https://gitee.com/yurj0403/hik-camera 强行练习一下用git 2. 加了状态栏 ...

  10. 夜莺项目发布 v6.5.0 版本,暗黑菜单来了

    大家好,夜莺项目发布 v6.5.0 版本,启用新 logo,菜单支持换肤,支持了暗黑版本的菜单,下一步会支持全站暗黑主题,敬请期待,下面是新 logo. 暗黑菜单 页面右上角点击用户名,在下拉框里会有 ...