js 函数参数以及内置参数arguments

  1. js 函数参数以及内置参数arguments
  2. 普通传参
  3. 默认参数
  4. arguments

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