JavaScript 中函数的参数

functionName(parameter1, parameter2, parameter3) {
    // 要执行的代码……
}

参数规则

JavaScript 函数定义时形参没有指定数据类型。

JavaScript 函数不会对实参的类型进行检测。

JavaScript 函数不会对实参的个数进行检测。

默认参数

如果调用函数时未传入足够多的实参,未提供的参数会被默认设置为: undefined.

所以我们最好为参数设置一个默认值。

function myFunction(x, y) {
    console.log(x);
    console.log(y);
    console.log(typeof y);
    y = y || 1;    //为 y 参数设置默认值 
    console.log(y);
}
myFunction(2);

如果传入了 y 参数,y = y || 1 会返回 y;如果没有传入 y 参数,y = y || 1 会返回我们设置的默认值 1,因为 undefined 为 false.

JS不同于其他语言,方便起见它通过第一个值求  “||”,第一个值为“true”,则返回第一个值;第一个值为“false”,则返回第二个值。

Arguments 对象

如果调用函数时传入了过多的实参,参数将无法被引用,因为无法找到对应的参数名。 只能使用 arguments 对象来调用实参。

JavaScript 函数有个内置的对象 arguments 对象。argument 对象包含了调用函数时传入的参数数组,它是一个类数组对象。

我们可以通过 arguments 对象的属性和方法让函数实现很多特殊的功能。

1、js不检测实参的个数,但是我们可以用 argument 对象的 length 属性检测实参的个数。

function add() {
    if( arguments.length == 2 ){
        return arguments[0] + arguments[1];
    }else{
        return '传入的参数不合法';
    }
}

console.log( add(2,3) );
console.log( add(1,2,3) );

2、重载函数。

js是一种弱类型的语言,没有重载机制,当我们重写函数时,会将原来的函数直接覆盖掉。

但是我们可以通过 arguments 对象判断传入实参的类型与数量,进行不同的操作,然后返回不同的数值,以实现重载。

function sumAll() {
    var i, sum = 0;
    for (i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}

console.log( sumAll(1,2,3,4,5) );   //15
console.log( sumAll(1,3,5,7,9,11,13) );     //49

3、定义一个函数来连接字符串。

你可以传递任意数量的参数到该函数,第一个参数指定一个字符作为衔接点来连接字符串。

function myConcat(separator) {
  var args = Array.prototype.slice.call(arguments, 1);  //从第二个参数开始将参数列表转换成参数数组
  return args.join(separator);
}

var x = myConcat(", ", "red", "orange", "blue");    //"red, orange, blue"
var y = myConcat("; ", "elephant", "giraffe", "lion", "cheetah");    //"elephant; giraffe; lion; cheetah"
console.log(x);
console.log(y);

 

附:转成数组的通用函数(可以将 arguments 对象转换成数组)

var toArray = function(s){
    try{
        return Array.prototype.slice.call(s);
    } catch(e){
        var arr = [];
        for(var i = 0,len = s.length; i < len; i++){
            //arr.push(s[i]);
               arr[i] = s[i];  //据说这样比push快
        }
         return arr;
    }
}

 

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments

posted @ 2018-07-24 16:56  l_along  阅读(355)  评论(0编辑  收藏  举报