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 相关文章推荐
jQuery UI Autocomplete 1.8.16 中文输入修正代码
Apr 16 Javascript
eval的两组性能测试数据
Aug 17 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
Oct 15 Javascript
js实现表格字段排序
Feb 19 Javascript
JS无缝滚动效果实现方法分析
Dec 21 Javascript
JS实现的简单拖拽功能示例
Mar 13 Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
Dec 25 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
vue.js实现图书管理功能
Sep 24 Javascript
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 Javascript
详解JavaScript数据类型和判断方法
Sep 04 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
python实现图片转字符画
2021/02/19 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
小学毕业演讲稿
2014/04/25 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
警察群众路线整改措施
2014/09/26 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
Java中的继承、多态以及封装
2022/04/11 Java/Android