深入理解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 相关文章推荐
利用ASP发送和接收XML数据的处理方法与代码
Nov 13 Javascript
Javascript 更新 JavaScript 数组的 uniq 方法
Jan 23 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
Dec 28 Javascript
将文本输入框内容加入表中的js代码
Aug 18 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
Jun 20 Javascript
网页运行时提示对象不支持abigimage属性或方法
Aug 10 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
Jan 04 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
Apr 12 Javascript
微信小程序利用co处理异步流程的方法教程
May 20 Javascript
元素全屏的设置与监听实例
Nov 28 Javascript
使用vue实现多规格选择实例(SKU)
Aug 23 Javascript
vue 查看dist文件里的结构(多种方式)
Jan 17 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
PHP 在线翻译函数代码
2009/05/07 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
php删除指定目录的方法
2015/04/03 PHP
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
IRO美国官网:法国服装品牌
2018/03/06 全球购物
武汉英思工程科技有限公司–ORACLE面试测试题目
2012/04/30 面试题
在校生钳工实习自我鉴定
2013/09/19 职场文书
成教毕业生自我鉴定
2013/10/23 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
影视后期实训报告
2014/11/05 职场文书
Python基础详解之描述符
2021/04/28 Python
Python max函数中key的用法及原理解析
2021/06/26 Python
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL