//编程过程中经常会碰到传值,传址的问题!今天的主题就是关于传值、与传址。

//先讲讲赋值操作

//下例是原始类型赋值操作

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的传值与传址的更多相关文章

  1. 再谈js传值和传址

    js的传值和传址还是真绕,前回文说道 1.值类型是传值的 2.对象和数组是传址的 这两点通过例子的到了证实 然而还有一种情况没有讨论 即 函数的参数的传值和传址 通过实验,在函数中用一个新对象去覆盖传 ...

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

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

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

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

  4. Java传值和传址

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

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

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

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

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

  7. JAVA传值与传址

    要了解JAVA中的传值与传址问题,必要先要了解JVA中的栈内存和堆内存,>>>>点些查看<<<<昨天写的学习记录 栈:基本数据类型.数据的引用变量,这两 ...

  8. 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址

    在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...

  9. java方法中,传参是传值还是传址问题(对比C语言、C#和C++)

    问题引出: 编写一个简单的交换值的小程序,如果我们只是简单地定义一个交换函数接收两个数,在函数内部定义一个中间变量完成交换.那么当我们把a,b两个实参传给这个函数时,往往得不到预期的结果.这是为什么呢 ...

随机推荐

  1. HDU-4862-Jump

    比今年第二个问题,第一个田间学校更多.在游戏中可以做不做,卡在K一旦有.阅读解决一个问题后,才做.内置图所示k这的确是很聪明倍. 代码: #include<cstdio> #include ...

  2. linux_安装_安装编译phantomjs 2.0的方法_转

    项目中要对数据公式webkit渲染,phantmjs 2.0的效果好比1.9好不少. 安装过程中 坑比较多. 转载文章: phantomjs 2.0最新版的官方不提供编译好的文件下载,只能自己编译,有 ...

  3. Go as continuous delivery tool for .NET

    http://simon-says-architecture.com/2014/02/28/go-as-continuous-delivery-tool-for-net/ Following my p ...

  4. 使用Vs2005打造简单分页浏览器(1)原创

    原文:使用Vs2005打造简单分页浏览器(1)原创 使用Vs2005打造简单分页浏览器(1)原创1引言2功能3实现过程以及关键点4总结5不足之处6其他7 代码下载 1    引言很早就有搞一个浏览器的 ...

  5. Emojicon - 为你提供emoji表情的整套方案

    Github : https://github.com/rockerhieu/emojicon 事实上国内的<表情大全>也有提供类似整套表情解决方式,并且还支持gif表情:http://w ...

  6. VS2010类模板修改——添加版权、说明

    VS2010类模板修改——添加版权.说明 最近在学习使用Memcache,就想着用C#代码写一个实现Cache与Memcache以及将来若是能融入Redis切换使用的程序集...不过刚开始写代码,强迫 ...

  7. 多线程学习之二坚不可摧模式Immutable pattern

    Immutable pattern[坚不可摧模式] 一:immutable pattern的参与者--->immutable(不变的)参与者        1.1:immutable参与者是一个 ...

  8. curl_redir_exec()函数

    function curl_redir_exec($ch,$debug="") { static $curl_loops = 0; static $curl_max_loops = ...

  9. 面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式

    什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下 ...

  10. PHP 14:类的实例

    原文:PHP 14:类的实例 在本章中我们将介绍一个实例,来进一步对类加深了解.本章构建一个Page类,它代表了一个页面.其中有显示页面的title,样式,内容等函数.此页面的效果如下:我们将把这个页 ...