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 相关文章推荐
JavaScript 的方法重载效果
Aug 07 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
Apr 12 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
javascript实现鼠标点击页面 移动DIV
Dec 02 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
js实现移动端编辑添加地址【模仿京东】
Apr 28 Javascript
jQuery扩展_动力节点Java学院整理
Jul 05 jQuery
详解在React中跨组件分发状态的三种方法
Aug 09 Javascript
Nautil 中使用双向数据绑定的实现
Oct 02 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
Jun 02 jQuery
微信小程序实现列表滚动头部吸顶的示例代码
Jul 12 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的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
使用js原生实现年份轮播选择效果实例
2021/01/12 Javascript
python获取外网ip地址的方法总结
2015/07/02 Python
Python实现将xml导入至excel
2015/11/20 Python
Python中的Django基本命令实例详解
2018/07/15 Python
Python连接Redis的基本配置方法
2018/09/13 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
python求前n个阶乘的和实例
2020/04/02 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
python 19个值得学习的编程技巧
2020/08/15 Python
python 制作简单的音乐播放器
2020/11/25 Python
python爬取抖音视频的实例分析
2021/01/19 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis