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 相关文章推荐
jquery键盘事件介绍
Jan 31 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
Mar 16 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
100个不能错过的实用JS自定义函数
Mar 05 Javascript
php实例分享之实现显示网站运行时间
May 20 Javascript
JSON相关知识汇总
Jul 03 Javascript
jQuery ajax分页插件实例代码
Jan 27 Javascript
javascript中JSON.parse()与eval()解析json的区别
May 19 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
JS生成一维码(条形码)功能示例
Jan 19 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
Oct 19 Javascript
JavaScript中arguments的使用方法详解
Dec 20 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电台频率大全 - 21 海南省
2020/03/11 无线电
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
加强版phplib的DB类
2008/03/31 PHP
php 前一天或后一天的日期
2008/06/28 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
javascript 的Document属性和方法集合
2010/01/25 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
Python 删除连续出现的指定字符的实例
2018/06/29 Python
TensorFlow实现Logistic回归
2018/09/07 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
几道PHP面试题
2013/04/14 面试题
员工拓展培训方案
2014/02/15 职场文书
大学军训感言1500字
2014/03/09 职场文书
班级课外活动总结
2014/07/09 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
导师鉴定意见
2015/06/05 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书