JavaScript中,按值传递与按地址(引用)传递。

时间:2022-09-12 16:04:41

JavaScript中,数字型,字符串,布尔型等基本类型,传递给变量时,传递方式为按值传递,这个很好理解,不做多解释。

而令人有所疑惑的,是数组,对象等引用类型传递给变量是,传递方式为按地址传递。此处的按地址传递有几点是非常值得注意的。

例如:

1.var a = [1,2,3,4];

2.var b = a;

3.a = [4,5,6];

4.console.log(b);

此时b为多少呢?

b = [1,2,3,4];

为什么此处a的改变不会是b发生变化?关键问题是第3行语句的理解。

首先第一行,a引用数组[1,2,3,4],不妨先假设数组[1,2,3,4]地址为A;

第二行,var b = a;应理解为,b引用了a当前的指向地址,即b指向地址A,即数组[1,2,3,4]。

第三行,a = [4,5,6];为修改a的指向地址,使a指向数组[4,5,6],不妨设其地址为B。

所以,最终结果为,b指向地址A,数组[1,2,3,4],a指向地址B数组[4,5,6];

其实,只要理解清楚,对数组变量的操作,实质为修改数组本身数据,还是修改变量的地址,则将一目了然。

举个例子:

arr = [1,2,3,4];

arr.pop();//此处操作为修改arr指向的数组本身。结果为arr = [1,2,3];

newArr = arr;//此处操作为赋予newArr指向arr所指向的地址,即数组[1,2,3]。

arr = [4,5,6];//此处操作为使arr指向新数组[4,5,6],arr指向新数组地址

console.log(arr);//此处arr = [4,5,6]

console.long(newArr);newArr = [1,2,3];

最后,一言以蔽之,关于数组变量的操作,应关注变量所指向地址的数组,以及操作所修改的为哪个地址的数组。

JavaScript中,按值传递与按地址(引用)传递。的更多相关文章

  1. JavaScript中的方法、方法引用和参数

    首先,我们来看一段代码,如果觉得不甚明白的,则本文会对你有益: var player = function (e) {             return (function f(m) {      ...

  2. JavaScript中的基本数据类型和引用数据类型

    ECMAScript变量包括了两种不同的数据类型 在学习JavaScript的数据类型时,我们通常会把数据类型分成六中(官方认为)Object.String.Boolean.Number.Undefi ...

  3. 验证python中函数传参是引用传递

    定义: 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 引用传递(pass by reference)是指在 ...

  4. javascript中的正确错误处理------------引用

    JavaScript的事件驱动机制让JavaScript更加丰富,浏览器好比就是一个事件驱动的机器,错误也是一种事件.当一个错误发生时,一个事件就在某个点抛出. 解释起来就是,当发生错误时,JavaS ...

  5. JavaScript中关于页面URL地址的获取

    1 window.location.host; //返回url的主机部分,例如 www.xxx.com window.location.hostname; //返回url的主机名,例如 www.xxx ...

  6. 转:C++中引用传递与指针传递区别

    从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...

  7. C++中引用传递与指针传递区别

    C++中引用传递与指针传递区别 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程 ...

  8. Java语言对对象采用的是引用传递还是按值传递?

    按值调用表示方法接收的是调用者提供的值:而按引用调用表示方法接收的是调用者提供的变量地址:一个方法可以修改传递引用所对应的变量值, 而不能修改传递值调用所对应的变量值: Java语言对对象采用的是引用 ...

  9. JAVA不可变类与可变类、值传递与引用传递深入理解

    一个由try...catch...finally引出的思考,在前面已经初步了解过不可变与可变.值传递与引用传递,在这里再次深入理解. 1.先看下面一个try..catch..finally的例子: P ...

  10. java是值传递还是引用传递

    首先写一个简便的Employee,以便测试使用. class Employee { private String name; public Employee(String name) { this.n ...

随机推荐

  1. 你真的会玩SQL吗?让人晕头转向的三值逻辑

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  2. 修改nginx配置文件解决dx2.5下载附件停止不动的问题

    在下载论坛附件的时候,总是停止在某个字数数不动 如下图 后来查看log发现 如下图 权限拒绝 发现后nginx的配置文件的启动者有关系 改了下 user 为 root 居然好了

  3. Java程序员的日常—— 基于类的策略模式、List<?>与List、泛型编译警告、同比和环比

    早晨起得太早,昨晚睡得太晚,一天都迷迷糊糊的.中午虽然睡了半个小时,可是依然没有缓过来.整个下午都在混沌中....不过今天下载了一款手游--<剑侠情缘>,感觉不错,喜欢这种类型的游戏. 今 ...

  4. Spark问题记录

    Spark 多线程时的序列化问题  临时记录 Exception in thread "Thread-28" org.apache.spark.SparkException: Ta ...

  5. Python框架

     Django.Pylons & TurboGears & repoze.bfg.Tornado & web.py.Bottle & Flask.Quixote(豆瓣用 ...

  6. Mac OS提示# 14:自己定义文件图标

    本教程的其余部分再一次错过了方法,和一些使用提示,做一些额外的,我们希望对大家有帮助.  自己定义图标      对于Mac OSX用户来说,Dashboard,Dock栏,壁纸以及各种键盘触摸板的快 ...

  7. Socket 学习(三)&period;5 UDP 的弱点

    前面 讲到了,udp 传输文本的例子,发现 udp 确实 比tcp 高效一些,现在我用来传输文件,问题果然来了,结果发现 他不能一次 传输大于 64K的东西! 那么 我自然想到了 切包,多次发送,再合 ...

  8. 1、Eclipse的安装

    下载地址:http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/indigosr1 2.java jdk 的 ...

  9. delphi使用sqlite数据库时的中文路径问题

    https://blog.csdn.net/yuehaiyang/article/details/4184198 如果数据库所在的路径是中文路径的话,根本运行不起来,会报错,因为sqlite用的是ut ...

  10. JS的document&period;anchors函数使用示例

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...