JavaScript函数参数传递机制与同名参数处理详解
本文深入解析JavaScript中函数参数的传递机制,区分原始类型的值传递与复合类型的引用传递对原始数据的影响。同时详细阐述同名参数在函数定义中的覆盖规则,即后出现的参数值优先,并介绍利用arguments对象获取被覆盖参数的方法。
本文通过具体实例解析JavaScript中函数参数的传递方式以及同名参数的处理逻辑,供读者参考学习。
函数参数的传递机制
函数参数的传递机制
当函数参数为原始类型值时,采用值传递方式。这意味着在函数内部对参数值的修改,不会反映到函数外部。
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指向了新地址,原地址上的值保持不变。
函数中的同名参数处理
函数中的同名参数处理
若函数定义中包含同名参数,实际取值时以最后出现的那个参数为准。
function f(a, a) {
console.log(a);
}
f(1, 2) // 2
在上述代码中,函数f定义了两个同名参数a。在取值时,以后面的a为准,即使后面的a未提供值或被省略,也以其值(或undefined)为准。
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.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
相关标签:
