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 相关文章推荐
jWiard 基于JQuery的强大的向导控件介绍
Oct 28 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
javascript实现动态统计图开发实例
Nov 21 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
Jun 26 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
简单实现JavaScript图片切换效果
Nov 28 Javascript
深入理解AngularJS中的ng-bind-html指令
Mar 27 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
Mar 31 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 Javascript
JavaScrip关于创建常量的知识点
Dec 07 Javascript
JS交互点击WKWebView中的图片实现预览效果
Jan 05 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
星际玩家的三大定律
2020/03/04 星际争霸
PHP与MySQL交互使用详解
2006/10/09 PHP
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
一段实时更新的时间代码
2006/07/07 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
python字符串string的内置方法实例详解
2018/05/14 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
Python with语句和过程抽取思想
2019/12/23 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
教师年终个人自我评价
2013/10/04 职场文书
2014的自我评价
2014/01/13 职场文书
大学运动会通讯稿
2014/01/28 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
消防隐患整改通知书
2015/04/22 职场文书
行政处罚告知书
2015/07/01 职场文书
保护动物的宣传语
2015/07/13 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js