JS函数参数的传递与同名参数实例分析


Posted in Javascript onMarch 16, 2020

本文实例讲述了JS函数参数的传递与同名参数。分享给大家供大家参考,具体如下:

函数参数的传递

函数参数如果是原始类型值,传递方式是值传递。这意味着,在函数体内修改参数值,不会影响函数外部。

var p = 2 
function f(p) {
 p = 3
}
f(p)
p // 2

上面代码中,变量p是一个原始类型的值,传入函数f的方式是值传递,因此在函数内部,p的值是原始值的拷贝,无论怎么修改,都不会影响到原始值。

但是,如果函数参数是复合类型,传入函数的方式是引用的传递,也就是说,传入函数的是一个地址,因此在函数内部修改参数,将会影响到原始值。

var obj = { p: 1 };

function f(o) {
 o.p = 2;
}
f(obj);

obj.p // 2

上面代码中,传入函数f的参数对象obj的地址。因此,在函数内部修改obj的属性p,会影响到原始值 。

注意,如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值 。

var obj = [1, 2, 3];

function f(o) {
 o = [2, 3, 4];
}
f(obj);

obj // [1, 2, 3]

上面代码中,在函数f内部,参数对象obj被整个替换成另一个值。这时不会影响到原始值。这是因为,形式参数(o)的值实际是参数obj的地址,重新对o赋值 ,导致o指向另一个地址,保存在原地址上的值当然不受影响。

函数中的同名参数

如果函数中出现了同名参数,则取最后出现的那个值

function f(a, a) {
 console.log(a);
}

f(1, 2) // 2

上面代码中,函数f有两个参数,且参数名都为a,取值 的时候,以后面的a为准,即使后面的a没有值,或者被省略,也是以其为准。

function f(a, a) {
 console.log(a);
}

f(1) // undefined

调用函数f的时候,没有提供第二个参数,a的取值就变成了undefined。这时,如果要获得第一个a的值,可以使用arguments对象。

function f(a, a) {
 console.log(arguments[0]);
}

f(1) // 1

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
JavaScript的事件绑定(方便不支持js的时候)
Oct 01 Javascript
jquery 清空file域示例(兼容个浏览器)
Oct 11 Javascript
JavaScript中创建类/对象的几种方法总结
Nov 29 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
Jul 15 Javascript
JavaScript对数组进行随机重排的方法
Jul 22 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
Dec 18 Javascript
jquery自动补齐功能插件flexselect用法示例
Aug 06 Javascript
Bootstrap与Angularjs的模态框实例代码
Aug 03 Javascript
JavaScript模板引擎原理与用法详解
Dec 24 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
Aug 13 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
Mar 16 #Javascript
JS函数本身的作用域实例分析
Mar 16 #Javascript
JavaScript实现tab栏切换效果
Mar 16 #Javascript
vue-cli3使用mock数据的方法分析
Mar 16 #Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
Mar 16 #Javascript
vue从零实现一个消息通知组件的方法详解
Mar 16 #Javascript
JavaScript实现动态留言板
Mar 16 #Javascript
You might like
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
如何在PHP中进行身份认证
2006/10/09 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
Prototype Hash对象 学习
2009/07/19 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
vue实现搜索过滤效果
2019/05/28 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
使用jquery实现轮播图效果
2021/01/02 jQuery
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
大学毕业登记表自我鉴定
2013/10/09 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
新春联欢会主持词
2014/03/24 职场文书
《桃林那间小木屋》教学反思
2014/05/01 职场文书
2015年端午节活动总结
2015/02/11 职场文书
python利用while求100内的整数和方式
2021/11/07 Python
Oracle用户管理及赋权
2022/04/24 Oracle