• 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

  • 相关阅读:
    spring在加Transactional的方法中使用redis取值为空的问题
    IDEA 调试jar文件
    搭建maven私有中央仓库
    F2BPM的流程仿真
    F2BPM流程中心RESTfull解决方案及示例
    F2BPM中关于工作流引擎驳回设计
    “员工请假”流程及在线表单开发示例
    在线表单字段做为节点处理人
    F2工作流引擎之-纯JS Web在线可拖拽的流程设计器(八)
    【原创】工作流引擎运转模型之--终极利器退回时回收分支算法
  • 原文地址:https://www.cnblogs.com/lalong/p/9361050.html
Copyright © 2020-2023  润新知