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 Cookie的读取和写入函数
Dec 08 Javascript
讨论html与javascript在浏览器中的加载顺序问题
Nov 27 Javascript
js实现简单的购物车有图有代码
May 26 Javascript
jQuery制作拼图小游戏
Jan 12 Javascript
js简单倒计时实现代码
Apr 30 Javascript
使用JS实现图片展示瀑布流效果的实例代码
Sep 12 Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
Mar 30 Javascript
Vuex中mutations与actions的区别详解
Mar 01 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
Mar 09 Javascript
详解JavaScript 为什么要有 Symbol 类型?
Apr 03 Javascript
关于Javascript闭包与应用的详解
Apr 22 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多文件上传实现代码
2014/02/20 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
vue使用自定义指令实现拖拽
2021/01/29 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
python实现五子棋人机对战游戏
2020/03/25 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
python的移位操作实现详解
2019/08/21 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
瑞士国际航空官网:SWISS
2016/07/21 全球购物
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
什么时候用assert
2015/05/08 面试题
师范大学音乐表演专业求职信
2013/10/23 职场文书
公司财务自我评价分享
2013/12/17 职场文书
环保专业大学生职业规划设计
2014/01/10 职场文书
家长学校实施方案
2014/03/15 职场文书
小学开学典礼主持词
2014/03/19 职场文书
《春雨》教学反思
2014/04/24 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
教师节校长致辞
2015/07/31 职场文书
子女赡养老人协议书
2016/03/23 职场文书
python的html标准库
2022/04/29 Python