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 相关文章推荐
网页的标准,IMG不支持onload标签怎么办
Jun 29 Javascript
用js实现预览待上传的本地图片
Mar 15 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
Jan 07 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
May 08 Javascript
js二维数组排序的简单示例代码
Jan 24 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
Oct 30 Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 Javascript
Javascript类型系统之undefined和null浅析
Jul 13 Javascript
angularjs通过过滤器返回超链接的方法
Oct 26 Javascript
微信小程序动态添加和删除组件的现实
Feb 28 Javascript
关于对TypeScript泛型参数的默认值理解
Jul 15 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中执行系统外部命令
2006/10/09 PHP
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
javascript 学习之旅 (1)
2009/02/05 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
[00:35]可解锁地面特效
2018/12/20 DOTA
python学习手册中的python多态示例代码
2014/01/21 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
Python根据服务获取端口号的方法
2019/09/25 Python
关于Python-faker的函数效果一览
2019/11/28 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
大学生自我鉴定范文
2013/12/28 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
英文演讲稿
2014/05/15 职场文书
爱国口号
2014/06/19 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书