Js从头学起(基本数据类型和引用类型的参数传递详细分析)


Posted in Javascript onFebruary 16, 2012

1、基本数据类型传递参数:

funciton addTen(num){ 


num+=10; 


return num; 

} 

var count=20; 

var result=addTen(count); 

alert(count);//20 

alert(resullt);//30

执行结果是:20和30。在这段代码中,将变量count当做参数传递给了函数addTen,也就是相当于将变量count的值复制给了函数addTen的参数。这时addTen的参数num可以看做是函数内部的一个变量。在上段代码中,就相当于两个基本数据类型变量之间的值复制。而基本数据类型都有自己独立的内存地址,所以num和count是没有任何关系的,他们只是值相等而已,函数执行完毕后,count的值并没有改变。而函数外面的result是被直接赋值的,所以result的值就是函数的结果30。

2、引用类型传递参数:

function setName(obj){ 


obj.name="LSN"; 

} 

var person=new Object(); 

setName(person); 

alert(person.name);//LSN

执行结果是:LSN。在这段代码中,函数setName的作用是给obj对象添加了一个属性name并给该属性赋值为"LSN",因为obj是引用类型,所以这里属于是将引用类型person赋值给了obj,也就是说person和obj引用了一个内存地址,所以当给obj新加了属性name时,在函数外面的person也跟着改变,最后person.naem的结果为LSN。

3、引用类型传递参数到底传的是值还是引用?

function setName(obj){ 


obj.name="ABC"; 


obj=new Object(); 


obj.name="BCD"; 

} 

var person=new Object(); 

setName(person); 

alert(person.name);// ABC

执行结果是:ABC。实例3与实例2的区别是在函数中又加了2行代码,在给obj对象新加一个属性name并赋值后 又将obj定义成了一个新的对象(new Object()),定义新对象后又name赋上新的值“BCD”。这个时候如果是按引用传递的话,那么最后person对象就会自动修改为指向其name属性为"BCD"的新对象,但最后显示的却是“ABC”,这说明即使在函数内部修改了参数的值,但原始的引用还保持不变。实际上,当在函数内部obj=new Object()时 这个新的obj就已经成为函数内部的局部对象了,这个对象会在函数执行完毕后自动销毁。

Javascript 相关文章推荐
drag-and-drop实现图片浏览器预览
Aug 06 Javascript
Jquery promise实现一张一张加载图片
Nov 13 Javascript
复杂的javascript窗口分帧解析
Feb 19 Javascript
AngularJS基础 ng-click 指令示例代码
Aug 01 Javascript
详解JS去重及字符串奇数位小写转大写
Dec 29 Javascript
微信小程序开发(一) 微信登录流程详解
Jan 11 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
微信小程序实现多个按钮toggle功能的实例
Jun 13 Javascript
老生常谈Bootstrap媒体对象
Jul 06 Javascript
详解关于react-redux中的connect用法介绍及原理解析
Sep 11 Javascript
Promise静态四兄弟实现示例详解
Jul 07 Javascript
通过JS获取用户本地图片路径并显示的代码
Feb 16 #Javascript
javascript简易缓动插件(源码打包)
Feb 16 #Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
Feb 16 #Javascript
js URL参数的拼接方法比较
Feb 15 #Javascript
javascript题目,重写函数让其无限相加
Feb 15 #Javascript
用JQUERY增删元素的代码
Feb 14 #Javascript
修改jQuery Validation里默认的验证方法
Feb 14 #Javascript
You might like
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
小程序如何支持使用 async/await详解
2019/09/12 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
python 多线程应用介绍
2012/12/19 Python
Python中turtle作图示例
2017/11/15 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
python迭代器常见用法实例分析
2019/11/22 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
应届生高等护理求职信
2013/10/12 职场文书
银行职业规划书范文
2013/12/28 职场文书
上课迟到检讨书
2014/02/19 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
法院执行局工作总结
2015/08/11 职场文书
2016新年晚会开场白
2015/12/03 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
Golang连接并操作MySQL
2022/04/14 MySQL