js 函数参数以及内置参数arguments
普通传参
ES5
中如果函数在调用时如果未提供隐式参数(实参),参数会默认设置为undefined
- 实参比形参多的时候,多出来的直接被忽略
function getSum(a, b, c) {
console.log(a + b + c);
}
let res1 = getSum(1, 2) // NaN,形参c没有赋值,为undefined,结果是 1 + 2 + undefined ,NaN
let res2 = getSum(1, 2, 3, 4) // 实参比形参多的时候,多出来的直接被忽略
默认参数
默认参数,ES5
中不值吃形参直接定义默认参数,需要自己再函数体中自己判断
function fn1(x, y) {
if (y === undefined) {
y = 0;
}
}
// 或者
function fn2(x, y) {
y = y || 0;
}
在ES6
中,可以在形参中直接设置默认参数;
function sumAll(a, b = 10) {
console.log(a + b);
}
sumAll(2, 2); // 输出4,此时a = 2,b = 10
sumAll(2); // 输出12,此时a = 2,b = 10(取默认值);
arguments
JavaScript
函数有个内置的对象arguments
对象。argument
对象包含了函数调用的参数数组。arguments
是一个伪数组,具有数组特性的arguments
对象
function fn3() {
console.log(arguments); // Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
for (let i = 0; i < arguments.length; i++) {
console.log(arguments[i]); // 1, 2, 3
}
}
fn3(1, 2, 3)
通过这种方式你可以很方便的找到最大的一个参数的值。
function findMax() {
var i, max = arguments[0];
if (arguments.length < 2) return max;
for (i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
let res = findMax(1, 123, 500, 115, 44, 88);
console.log(res); // 500
arguments
是一个伪数组,只有一个length
属性,不能使用数组的一些方法,使用Array.prototype.slice.call()
方法可以把伪数组对象变成一个真正的数组(注意此方法转换的对象必须要有length
属性)
function fn() {
console.log([].slice.call(arguments));
}
fn(1, 2, 3)
如果在参数中传递...args
,表示剩余参数,保存在一个数组里面,如果有像下面的形式,那么将会把第一个参数给到x
,其他的再保存在args
数组里面
function fn1(x, ...args) {
console.log(x); // 1
console.log(args); // [2, 3]
}
fn1(1, 2, 3)
解构参数
function fn2(...args) {
console.log(args); // [1, 2, 3, 4, 5, 6]
}
let args1 = [1, 2, 3]
let args2 = [4, 5, 6]
fn2(...args1, ...args2) // 参数解构
// console.log(...[1, 2, 3]); // 1, 2, 3
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com