js的传值和传址还是真绕,前回文说道

1.值类型是传值的

2.对象和数组是传址的

这两点通过例子的到了证实

然而还有一种情况没有讨论

函数的参数的传值和传址

通过实验,在函数中用一个新对象去覆盖传入的对象,则类似于传值的效果,原数据无法得到新值

var s = {value:}
var s1 = {value:} function setValue(arg){
arg = s1
} setValue(s) console.log(s.value)
console.log(s1.value)

这个例子的结果是 s.value = 1 s1.value=2 ,相互没有影响。

那么问题来了

有时候硬是要通过传入参数取回返回值要如何做呢?

其实按照定义,是可以这么理解的,如果你覆盖了这个对象,则不是传址了,如果修改对象的一部分,则还是传址,不妨再做一个实验。

var s = {sn:{value:}}
var s1 = {value:} function setValue(arg){
arg.sn = s1
} setValue(s) console.log(s.sn.value)
console.log(s1.value)

结果都是 2

通过外层再包装一层对象,成功的 把 s1取了出来,算是一种变通的方法吧

一个应用场景,其实是我在做web文件管理器时遇到的东西。

文件管理器要选择文件,单击一个文件,该文件会显示选中状态,按住ctrl继续单击其他文件,又会有一个文件显示选中状态

如果放开ctrl去选择另外的文件时要求曾经被选中的取消选中状态。说的有点儿绕,脑补吧,我也不知道咋描述了。

一个办法是你可以去用循环去取消之前的选中文件的选中状态,而另一个方法

将选中文件的状态都指向同一个状态对象,该对象的值是true,当要取消之前的若干选中时,只要把这个对象的值设置为false,则立即取消了所有被选中的文件。

而不用去循环处理过往数据。

以上

再谈js传值和传址的更多相关文章

  1. 也谈js传值和传址

    通常的认识就是基本的数值元素是传值,对象等复杂结构传址,无需争论,一试便知. 首先是数值 var a = 1 var b = a a = 2 console.log(a) console.log(b) ...

  2. 图解JS的传值与传址

    //编程过程中经常会碰到传值,传址的问题!今天的主题就是关于传值.与传址. //先讲讲赋值操作 //下例是原始类型赋值操作 var a=1,b=a,a=2; console.log("a=& ...

  3. js- 引用和复制(传值和传址)

    js- 引用和复制(传值和传址) 好像一般很少人讲到js中的引用和复制,不过弄清楚这个概念可以帮助理解很多东西 先讲一下很基础的东西,看看js中几种数据类型分别传的什么引用:对象.数组.函数复制:数字 ...

  4. javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象

    对象字面量  JSON var obj = { aaa :999}; var json={"aaa":999,"bbb":888}; "kay&quo ...

  5. Java方法传递参数传值还是传址的问题

    这几天重构项目代码遇到一个疑问:可不可以在方法A中定义一个boolean变量b为false,然后A调用方法C把b传递到C方法中经过一些列业务判断后修改为true,C执行结束后A方法中b的值还是原来的f ...

  6. C# 函数的传值与传址(转)

    http://www.cnblogs.com/mdnx/archive/2012/09/04/2671060.html using System; using System.Collections.G ...

  7. Java传值和传址

    调用函数时,传的参数过去可能是传值,也可能是传址.如果是传值,函数内部的操作对参数的值没有影响:如果是传址,函数内部的操作是对参数指向的内存进行操作,会影响参数的值. Java到底是传值还是传址?用下 ...

  8. javascript的变量,传值和传址,参数之间关系

    先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型) ...

  9. Python的传值和传址与copy和deepcopy

    1.传值和传址 传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针).他们的区别是如果函数里面对传入的参数重新赋值,函数外的全局变量是否相应改变,用传值传入的参数是不会 ...

随机推荐

  1. Python3基本数据类型(一、数字类型)

    第一次写博客,感觉心情比较紧张,有一种要上台演讲的紧张感(虽然可能大概也许不会有人看).在此立个flag,以后每个学习阶段都要写一篇博客,来记录自己学习成长的这段日子.Fighting! 废话不多说, ...

  2. 第一次团队Scrum

                                    长大一条龙之成绩查询 一.项目介绍             本项目的意义在于锻炼团队的scrum能力,加强团队合作能力.确定本项目采用的 ...

  3. 使用Cloud application Studio在C4C UI里创建下拉列表(dropdown list)

    在Cloud Application Studio里新建一个Code List Data Type: 维护Value和描述信息,以及在ABSL里使用的constant值. 保存之后,上述维护的信息会存 ...

  4. 一个SAP开发人员的2017总结

    今年的生活如此丰富多彩,不写一点什么怎么对得起这过去的一年? 就当记流水账,若干年之后回来看一定很有意思. 1月 有幸成为SAP Community上2位来自China的SAP mentor之一: 3 ...

  5. 页面三个txt加载联动省市县的代码,类似淘宝的收货地址的布局

    页面三个txt加载联动省市县的代码,假如有一个树形的JSON,分别显示的省市县这时候三个TXT怎么做联动效果呢,这里用framework7为例HTML: <div class="lis ...

  6. Photoshop 画布的渐变填充

    之前丢掉的要开始慢慢的捡起来,因为学如逆水行舟,不进则退.古人诚不欺我等. 1.新建图层,或者就在当前图层进行操作,选择图层 2.工具箱---1渐变工具---2径向渐变---模式--正常.不透明100 ...

  7. [转]关于VC++ MFC中的空闲Idle处理机制!

    关键词: 先根据空闲标志以及消息队列是否为空这两个条件判断当前线程是否处于空闲状态(这个“空闲”的含义同操作系统的含义不同,是MFC自己所谓的“空闲”),如果是,就调用CWinThread::OnId ...

  8. IntelliJ Idea 常用快捷键列表和快速输入

    IntelliJ Idea 常用快捷键列表和快速输入 快速输入查看 最常用快捷键 Alt+Enter 万能快捷键,用于引入错误包 Ctrl+ Mouse left 快速调转定义 快捷键 Ctrl+Sh ...

  9. MySql数据库表类型MYISAM与InnoDB的区别

      InnoDB与Myisam的六大区别 MyISAM   InnoDB   构成上的区别:   每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型. .frm ...

  10. Python—面向对象 封装03

    接着上面的一篇继续往下: 如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) class A: __x = 1 # _A__x = 1 def __init__(self, ...