变量的复制

变量的类型

可以分为基本数据类型(Null、Undefined、Number、String、Boolean)和引用类型(Funtion、Object、Array)

基本数据类型是按照值访问,可以直接操作保存在变量中实际的值

引用数据类型是按引用访问的,值是保存在对象上的对象,我们可以对引用类型的值进行添加、改变、删除方法和属性的操作

复制变量值

把A复制给B:首先创建B,再将A的值赋值到新变量被分配的内存中

基本数据类型复制的是值,复制后,两个变量之间独立不影响

引用数据类型复制的是引用地址,复制后,将变量对象中存储的指针复制给新变量分配的内存,两个变量的引用地址相同,指针属于同一个对象,两者之间的变化相互影响

传递参数

所有函数的参数都是按值传递,把函数外部的值复制给函数内部的参数。

基本数据类型值的传递就是复制值给一个局部变量(命名参数),引用类型值的传递就是复制值在内存中的地址给一个局部变量。因此变量的变化可以反映在函数的外部。

基本类型传递:

var count = 20;
function addTen(num){
num+=10;
return num;
}
var result = addTen(count)
alert(count);
alert(result);

count是全局变量,

addTen(count)的作用将count的值复制给局部变量num,值加10,体现在返回值num在result上,result=30

对count没有改变,count=20;

引用类型传递:

 var person = new Object();
function setName(obj){
obj.name = 'xia'
}
setName(person);
console.log(person.name);

先声明了一个对象person,

创建设置名字的函数setName,并传入person,将person对象的地址复制给obj,从而person对象上增加了属性name

为了说明传递时对象是按值传递而不是按引用传递,看下列例子

var human = new Object();
function setMessage(obj){
obj.age = 19;
obj = new Object();
obj.name = 'XIA';
obj.age = 18;
}
setMessage(human);
console.log(human.age)
console.log(human.name)

先声明对象human,

创建函数setMessage,可以给对象添加属性,但函数中又重新定义了一次对象,并添加属性,会发生什么呢?

如果参数是引用传递的话,

human先是复制给obj,添加了age属性为19,重新定义对象后,对象内被重置,再添加属性age=18,name=’XIA‘,

最后输出结果应该为:18,XIA

但是真实输出结果为:19,undefined

就是说,参数是按值传递的,可以看上图,obj在重新定义后就指向新的内存空间了并变化属性(局部变量,使用后销毁),human没有相应的变化-原始引用不变,可知这是值传递的复制。

变量的复制&传递的更多相关文章

  1. python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变

    函数参数传递本质上和变量整体复制一样,只是两个变量分别为形参a和实参b.那么,a=b后,a变了,b值是否跟着变呢?这取决于对象内容可变不可变 首先解释一下,什么是python对象的内容可变不可变? p ...

  2. JavaScript传递变量:值传递?引用传递?

    今天在看 seajs-2.2.1/src/util-events.js源码,里面有段代码不是很理解: var events = data.events = {} // Bind event seajs ...

  3. java变量和javascript变量之间的传递

    java代码是运行在服务器上的,返回的值只是静态的存在于页面,而javascript是脚本语言,是运行在客户端的!它们是两种完全不同的语言,变量不能直接进行交换,但是通过一定的方式,变量可以传递. j ...

  4. Matlab M文件变量检测与传递

    M文件中变量的检测与传递 可变数量的输入输出变量(varargin,vararout): Matlab的输入输出变量数量可变,并具有以下特点: 可变输入输出变量必须在正常变量之后 varargin和v ...

  5. OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析

    ☞ ░ 前往老猿Python博文目录 ░ 一.使用全局变量进行变量传递 OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数,我们来看个样例. 1.1.案例1代 ...

  6. HttpRunner3的变量是如何传递的

    HttpRunner3的变量可以在测试类的用例配置中通过variables添加,也可以在测试步骤中使用extract().with_jmespath()提取出来放到变量x,再用$x传递给下一个接口使用 ...

  7. 环境变量LD_LIBRARY_PATH的传递

    http://bbs.chinaunix.net/thread-3680861-1-1.html execv明显没有传环境变量,execle或execve才会带在启动shell设置的LD_LIBRAR ...

  8. 关于变量参数的传递,python让人蛋痛的地方

    def find_file(file_table): with open(file_table, 'r', encoding='utf-8') as read_f: line_dict = {} fo ...

  9. JavaScript 参数传递与变量复制

            ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.         5 种基本数 ...

随机推荐

  1. 数据结构与算法【Java】03---栈

    前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...

  2. CAD二次开发(.net)优秀网站分享

    Autodesk官方网站 官方帮助文档:AutoCAD 2016 帮助: Managed .NET Developer's Guide (.NET) (autodesk.com) DXF帮助手册:DX ...

  3. 【NOI P模拟赛】大阶乘(斯特林数)

    题意 求 16 16 16 进制下, n ! n! n! 去掉尾部 0 0 0 后取模 2 64 2^{64} 264 的结果. n < 2 64 n<2^{64} n<264 一共 ...

  4. WinUI(WASDK)项目实践——优雅的开发上位机应用(新)

    摘要 这就是一个记录自己进行WinUI项目实践的博客,项目开源地址如下,觉得有帮助的可以去看看,因为项目都开源了,所以保姆级的讲解肯定不如直接看代码来的实在了. 电子脑壳项目地址 为什么叫新 因为之前 ...

  5. KingbaseES V8R6单实例外部备份故障案例

    案例说明: 在KingbaseES V8R6单实例环境,配置外部备份服务器使用sys_backup.sh物理备份时,出现以下"WAL segment xxx was not archived ...

  6. Markdown Support

    Markdown 支持一览 Markdown 支持一览 身正不怕影子斜 我实在没有说过这样一句话 -- 鲁迅 古代文学史发展脉络 唐诗 宋词 元曲 冯·诺依曼结构 运算器 控制器 存储器 输入输出设备 ...

  7. LIMIT和OFFSET分页性能差!今天来介绍如何高性能分页

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 前言 之前的大多数人分页采用的都是这样: SELEC ...

  8. linux下安装mysql(rpm安装)

    Mysql 5.7.29安装步骤 1.首先卸载自带的Mysql-libs(如果之前安装过mysql,要全都卸载掉) rpm -qa | grep -i -E mysql\|mariadb | xarg ...

  9. Win32简单图形界面程序逆向

    Win32简单图形界面程序逆向 前言 为了了解与学习底层知识,从 汇编开始 -> C语言 -> C++ -> PE文件 ,直至今天的Win32 API,着实学的令我头皮发麻(笑哭). ...

  10. SkyWalking简要介绍

    什么是 SkyWalking 分布式系统的应用程序性能监视工具,专为微服务.云原生架构和基于容器(Docker.K8s.Mesos)架构而设计.提供分布式追踪.服务网格遥测分析.度量聚合和可视化一体化 ...