欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript 中函数的参数

程序员文章站 2022-03-29 17:17:28
functionName(parameter1, parameter2, parameter3) { // 要执行的代码…… } 参数规则 JavaScript 函数定义时形参没有指定数据类型。 JavaScript 函数对实参的类型不会进行检测。 JavaScript 函数对实参的个数不会进行检测 ......
functionName(parameter1, parameter2, parameter3) {
    // 要执行的代码……
}

参数规则

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

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

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

默认参数

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

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

function myFunction(x, y) {
    console.log(typeof y);
    y = y || 1;    //为 y 参数设置默认值 1
    console.log(x);
    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