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 相关文章推荐
超级有用的13个基于jQuery的内容滚动插件和教程
Jul 31 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
May 05 Javascript
angularJS中$apply()方法详解
Jan 07 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
Jan 25 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
Nov 23 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
Feb 15 Javascript
vuejs手把手教你写一个完整的购物车实例代码
Jul 06 Javascript
vue axios 在页面切换时中断请求方法 ajax
Mar 05 Javascript
vue打包使用Nginx代理解决跨域问题
Aug 27 Javascript
Nuxt.js SSR与权限验证的实现
Nov 21 Javascript
javascript实现点击小图显示大图
Nov 29 Javascript
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 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
VFP与其他应用程序的集成
2006/10/09 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
详解webpack进阶之loader篇
2017/08/23 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
python实现爬取千万淘宝商品的方法
2015/06/30 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
python样条插值的实现代码
2018/12/17 Python
浅析Python3 pip换源问题
2020/01/06 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
Django如何使用redis作为缓存
2020/05/21 Python
python time()的实例用法
2020/11/03 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
商场拾金不昧表扬信
2014/01/13 职场文书
2014新年寄语
2014/01/20 职场文书
英文留学推荐信范文
2014/01/25 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
2015学校年度工作总结
2015/05/11 职场文书
电影雨中的树观后感
2015/06/15 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL