JavaScript 中函数的参数分析

java哥 阅读:120 2020-02-20 18:53:16 评论:0
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

标签:JavaScript
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
关注我们

扫一扫关注我们,了解最新精彩内容