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 相关文章推荐
Javascript 文件夹选择框的两种解决方案
Jul 01 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
Mar 19 Javascript
jquery实现鼠标滑过显示提示框的方法
Feb 05 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
Aug 07 Javascript
利用Jquery队列实现根据输入数量显示的动画
Sep 01 Javascript
AngularJs  Understanding Angular Templates
Sep 02 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
Dec 14 Javascript
基于JQuery及AJAX实现名人名言随机生成器
Feb 10 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
Jan 25 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
vue + axios get下载文件功能
Sep 25 Javascript
vue的三种图片引入方式代码实例
Nov 19 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
php下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
php 页面执行时间计算代码
2008/12/04 PHP
PHP 学习路线与时间表
2010/02/21 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
Python写入CSV文件的方法
2015/07/08 Python
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
晚宴邀请函范文
2014/01/15 职场文书
《理想》教学反思
2014/02/17 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
导游词之镇江焦山
2019/11/21 职场文书
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技