• 函数的参数


    ECMAScript函数不在乎传进来多少个参数,也不在乎传进来的参数是什么类型。原因是因为ECMAScript中的参数在内部用一个数组来表示。函数接收到的始终是这个数组,而不关心数组中包含哪些参数和参数的个数。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。

    arguments对象

    这个对象只是和数组类似,并不是Array的实例,之所以与数组类似是因为:

    • 可以使用方括号的语法来访问
    • 可以使用length属性来确定传进来的参数个数,可以根据传进来的不同参数个数,做不同的操作

    使用

    1.arguments对象可以与命名参数一起使用
    2.传递不同的参数个数,会影响到arguments对象和命名参数的值

    function doAdd(num1,num2){
        arguments[0] = 10;
        arguments[1] = 10;
        alert(arguments[1]);
        alert(num2);
    }
    doAdd(20);// 10 undefined,这里只传递了一个参数,对arguments[1]进行修改并不会反映到num2上,这是因为arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的的命名参数个数决定的。还有没有传递值的命名参数将自动被赋予undefined值
    doAdd(5,20);//10 10 
    

    如果传递了相应的命名参数,对arguments对象中的值进行改变,也会反映到命名参数中,即会同步。但是读取这两个值并不会访问相同的内存空间,它们的内存空间是独立的。
    ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数

    没有重载

    因为JavaScript中的函数没有签名,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能的。

    function doAdd(num1){
        alert(num2+num1);
    }
    function doAdd(num1,num2,num3){
        alert(num1);
    }
    doAdd(5); //5 后面定义的函数覆盖了之前的那个函数
    

    但是可以通过检查传入函数的参数类型和个数并作出不同的反应,可以模仿方法的重载。

  • 相关阅读:
    ionic打包步骤(安卓)
    使用ionic开发时用遇到监听手机返回按钮的问题~
    SQL语句
    SQL小结
    AangularJS的表单验证
    AangularJS过滤器详解
    mysql基础一
    初识rabbitmq
    对数字加千分号实现
    rabbitmq安装
  • 原文地址:https://www.cnblogs.com/sminocence/p/8410867.html
Copyright © 2020-2023  润新知