深入理解JavaScript中的传值与传引用


Posted in Javascript onDecember 09, 2013

1.传值(by value)

变量的值被复制出一份,与原来的值将不相干,也就是说即使新的值被修改,原来的值也不会改变,在JavaScript中基本类型都是传值的.

function testPassValue()
{
   var m=1;
   var n=2;
   //将m,n的值复制一份,传递到passValue
   passValue(m,n);
   alert(m);  //将是原有的值
}
function passValue(a,b)
{
  a = a+b; //改变a的值,这里a只是原有值的一份copy
  alert(a);  
}

输出结果:
3

1

2.传引用(by reference).

引用本身复制一份传给function,引用指向的对象并没有被复制传递(java中也是如此),在function中,如果改变了对象的属性的值,由于和原来的引用指向的是同一个对象,因此在通过原来的引用访问到的将是修改过的值;

但是如果只是在function中将引用指向一个新的对象,将不会改变原对象的值,改变的只是复制的这一份引用.

function testPassValue()
{
  var date = new Date(2006,02,27);
  alert(date.getDate());  //输出为 27
  //将date引用本身复制一份,传递到passReference,注意date所指向的对象并没有被复制
  passReference(date);
  alert(date.getDate());  //输出为12
  //同上
  changeReference(date);
  alert(date.getDate());  //输出还为12
}
function passReference(da)
{
 //由于da和原引用指向的是同一个对象,在function外,通过原有的引用访问到的将是对象的日期属性值,将是修改之后的值.
   da.setDate(12); 
}
function changeReference(da)
{
   //此时da引用实际上是原引用的一份copy,将引用本身重新赋值,将不会影响原引用
   da= new Date(2007,05,11); 
//将da引用指向一个新的对象,此时原引用指向的还是原来的对象
   alert(da.getDate());     // 输出为11
}

3 特殊的String 

在JavaScript中,String也传引用的. js中只有charAt方法,而没有对应的修改方法,和java中的String相同,都具有不变性.

var s1 = "hello";
var s2 = "hell" + "o";
if (s1 == s2)   
alert("s1 = s2");  //这句会不会执行? java用的熟的人可能会认为不会执行(这句话我颇有微词,java中也是会执行的!),因为java中的==比较的是同一性. 事实上在js中对String==比较的是值是否相等,所以这句话会执行. 但是对其他的Object == 比较和java中一样是同一性.
Javascript 相关文章推荐
前端开发过程中浏览器版本的两种判定方法
Oct 30 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
Oct 16 Javascript
JavaScript的事件代理和委托实例分析
Mar 25 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
Jun 01 Javascript
jQuery对html元素的取值与赋值实例详解
Dec 18 Javascript
JavaScript核心语法总结(推荐)
Jun 02 Javascript
JavaScript中const、var和let区别浅析
Oct 11 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
Aug 14 Javascript
jquery+css实现下拉列表功能
Sep 03 jQuery
JS逻辑运算符短路操作实例分析
Jul 09 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
vue请求数据的三种方式
Mar 04 Javascript
js Array操作的最简短最容易理解方法
Dec 09 #Javascript
javascript放大镜效果的简单实现
Dec 09 #Javascript
javascript贪吃蛇完整版(源码)
Dec 09 #Javascript
关于js内存泄露的一个好例子
Dec 09 #Javascript
JS连连看源码完美注释版(推荐)
Dec 09 #Javascript
解析Javascript中难以理解的11个问题
Dec 09 #Javascript
深入理解Javascript作用域与变量提升
Dec 09 #Javascript
You might like
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
python实现数据图表
2017/07/29 Python
Python中的探索性数据分析(功能式)
2017/12/22 Python
Python get获取页面cookie代码实例
2018/09/12 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
护士自我评价
2014/02/01 职场文书
个人作风剖析材料
2014/02/02 职场文书
一名老师的自我评价
2014/02/07 职场文书
洗车工岗位职责
2014/03/15 职场文书
企业文化宣传标语
2014/06/09 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
房产公证书格式
2015/01/26 职场文书
煤矿安全保证书
2015/02/27 职场文书
给病人的慰问信
2015/03/23 职场文书
业务员岗位职责范本
2015/04/03 职场文书
小学生红领巾广播稿
2015/08/19 职场文书