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

//a先是被赋值为1,接着把a的值赋给b, 这时会进行值的拷贝,因此b=1;然后又把a赋值为2.
//在没有执行a=2之前,我们试试下列代码:
console.log(a===b); //输出为true. 可见它们在内存中是指向同一个位置的。
//下例是引用类型赋值操作
var aTest1=['Dylan',"Tong","Xue"],aTest2=aTest1,aTest1=[1,2,3];
console.log('aTest1='+aTest1+",aTest2="+aTest2);

//引用类型赋值并不会真正重新拷贝引用值,而是拷贝引用的地址。注:图中原来的值用Old表示,重新赋过的值用New.
//aTest1与aTest2是引用同一个地址,至到aTest1被重新指向[1,2,3]才改变了aTest1的引用地址。
var aTest1=['Dylan',"Tong","Xue"],aTest2=aTest1;aTest1[1]=24;
console.log('aTest1='+aTest1+",aTest2="+aTest2);

//aTest1与aTest2是引用同一个地址,所以如果修改了aTest1[1], aTest2[1]的值也会被修改。
//那么关于函数的传值,道理相同。
//当参数为原始类型时,是直接拷贝其值,而为引用类型时是拷贝其引用的地址。
var a=1,b=2;
function f1(arg1,arg2){
arg1=28,arg2=2;
console.log(arg1+" "+ arg2);
} f1(a,b);
console.log(a+" "+b); var aTest1=[10,11,12],aTest2=['hello','world'];
console.log('aTest1='+aTest1+",aTest2="+aTest2);
function f2(arg1,arg2){
arg1[1]='dylan',arg2[1]='dylan';
console.log(arg1+" "+arg2)
} f2(aTest1,aTest2);
console.log('aTest1='+aTest1+",aTest2="+aTest2);
图解JS的传值与传址的更多相关文章
- 再谈js传值和传址
js的传值和传址还是真绕,前回文说道 1.值类型是传值的 2.对象和数组是传址的 这两点通过例子的到了证实 然而还有一种情况没有讨论 即 函数的参数的传值和传址 通过实验,在函数中用一个新对象去覆盖传 ...
- javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象
对象字面量 JSON var obj = { aaa :999}; var json={"aaa":999,"bbb":888}; "kay&quo ...
- js- 引用和复制(传值和传址)
js- 引用和复制(传值和传址) 好像一般很少人讲到js中的引用和复制,不过弄清楚这个概念可以帮助理解很多东西 先讲一下很基础的东西,看看js中几种数据类型分别传的什么引用:对象.数组.函数复制:数字 ...
- Java传值和传址
调用函数时,传的参数过去可能是传值,也可能是传址.如果是传值,函数内部的操作对参数的值没有影响:如果是传址,函数内部的操作是对参数指向的内存进行操作,会影响参数的值. Java到底是传值还是传址?用下 ...
- javascript的变量,传值和传址,参数之间关系
先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型) ...
- Python的传值和传址与copy和deepcopy
1.传值和传址 传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针).他们的区别是如果函数里面对传入的参数重新赋值,函数外的全局变量是否相应改变,用传值传入的参数是不会 ...
- JAVA传值与传址
要了解JAVA中的传值与传址问题,必要先要了解JVA中的栈内存和堆内存,>>>>点些查看<<<<昨天写的学习记录 栈:基本数据类型.数据的引用变量,这两 ...
- 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址
在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...
- java方法中,传参是传值还是传址问题(对比C语言、C#和C++)
问题引出: 编写一个简单的交换值的小程序,如果我们只是简单地定义一个交换函数接收两个数,在函数内部定义一个中间变量完成交换.那么当我们把a,b两个实参传给这个函数时,往往得不到预期的结果.这是为什么呢 ...
随机推荐
- Asp.Net超时问题汇总
在数据库或者请求操作时,如果选择的时间段过短或操作数据量过大,就会遇到"请求超时"的的问题,网络上提供很多解决方案,但普遍不完善,根据个人经验及参考网络解决方案,先将其汇总如下: ...
- 【转】HTTP协议两种提交参数的方式Form-data和raw
原文:http://www.cnblogs.com/zhangfei/p/5099036.html HTTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提 ...
- 转载使用Flurl制作可复用的分页组件
使用Flurl制作可复用的分页组件 使用ASP.NET MVC查询时,一直使用MvcPaging组件,虽然需要自定义MvcPaging.Pager才能达到我想要的效果,但在没有较好的URL库时,还是这 ...
- PHP-微信公众平台开发-接收用户输入消息类型并响应
原文:PHP-微信公众平台开发-接收用户输入消息类型并响应 <?php // 该代码块用于接收用户消息,根据用户输入的消息类型进行判断,文本,图片,视频,位置,链接,语音等,并取得值,处理后给予 ...
- Hibernat之关系的处理多对多
第一步:编写两个pojo,比如一个学生表一个课程表 这里使用注解. 需要 课程表: package com.qcf.pox; import java.util.HashSet; import jav ...
- Asp.net vNext 学习3
Asp.net vNext 学习之路(三) asp.net vNext 对于构建asp.net 程序带来了一些重大的改变,让我们开发asp.net 程序的时候更加的方便和高效. 1,可以很容易的去管理 ...
- 汤姆大叔 深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解 后六道题答案
原题目地址:http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html 答案丰富多彩.我只是记录下自己思考了半天全部的答案. 题目一:找出 ...
- 关于winlogo.exe中了“落雪”病毒的解决方法
Windows Logon Process,Windows NT 用户登陆程序,管理用户登录和退出.该进程的正常路径应是 C:\Windows\System32 且是以 SYSTEM 用户运行,若不是 ...
- 学习使用简单的php
配置文件在:/etc/php5/$中,不同的模式含有自己的php.ini配置文件.php可以运行于多种模式:cgi.fastcgi.cli.web模块模式等4种: 我现在使用的模式是cli模式,这里进 ...
- 输入 URL 到页面完成加载过程中的所有发生的事情?
转到浏览器中输入URL给你一个页面后,.有些事情,你每天都在使用,学的是计算机网络知道是怎么回事.DNS解析然后页面的回馈,只是要讲好还是有难度. 之前fex团队的nwind专门写过这个问题的博客: ...