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 相关文章推荐
一个js实现的所谓的滑动门
May 23 Javascript
jQuery 使用手册(六)
Sep 23 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
May 02 Javascript
用js写了一个类似php的print_r输出换行功能
Feb 18 Javascript
jquery操作cookie插件分享
Jan 14 Javascript
AngularJS中$interval的用法详解
Feb 02 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
Nov 01 Javascript
简单三步实现报表页面集成天气
Dec 15 Javascript
jQuery UI仿淘宝搜索下拉列表功能
Jan 10 Javascript
学习JS中的DOM节点以及操作
Apr 30 Javascript
使用javascript做在线算法编程
May 25 Javascript
解决LayUI数据表格复选框不居中显示的问题
Sep 25 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
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
document.documentElement的一些使用技巧
2013/04/18 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
django模板结构优化的方法
2019/02/28 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
Python接收手机短信的代码整理
2020/08/02 Python
Python远程linux执行命令实现
2020/11/11 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
护士实习生自我鉴定范文
2013/12/10 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python