• js调用函数时传入的参数个数与函数定义时的参数个数不符时的操作


    1.在js中函数没有重载的概念,如果声明了多个重名的函数,不管函数的形参个数是否一样,只有最有一个有效,其他的函数声明都是无效的。比如说声明了两个函数fn(),第一次声明时没有形参,第二次声明时形参有两个,则在调用fn()时不管有没有传入参数,都是调用后声明的那个函数。假如说调用时只传入了1个参数,例如fn(1),则1会赋给函数的第一个形参,而第二个形参不会赋值,如果有用到,就会当undefined处理,可能会报错。如果调用时传入了3个参数,例如fn(1,2,3),则1会赋给第一个形参,2会赋给第二个形参,3是用不上的,但是不会报错。

    2.案例

    <html>

      <head>

        <title>

          函数调用测试,参数个数和函数声明不一样多

        </title>

        

        <script language="JavaScript">

          function  needTwoPara(p1,p2){

                    var a=arguments;

                    var result='我是个需要2个参数的函数 '

                                         +'您输入的参数的个数为:'+a.length+' '

                    for(var i=0, len = a.length; i < len; i++){

                            result=result+'第'+(i+1)+'个参数为:'+a[i]+' '

                        }

                    result+='以上是用arguments来获得参数 ';

                    result+='下面用变量来获得参数: ';

                    result+='p1:'+p1+' ';

                    result+='p2:'+p2+' ';

                alert(result);

            }

         </script>

        </head>

        <body>

           <form>

              <input type="button" value="测试1--传递1个参数"

                onClick="JavaScript: needTwoPara('smallerpig');">

           </form>

           <form>

              <input type="button" value="测试2--传递2个参数"

                onClick="JavaScript: needTwoPara('smallerpig','小小猪');">

           </form>

           <form>

              <input type="button" value="测试3--传递3个参数"

                onClick="JavaScript: needTwoPara('smallerpig','小小猪','生命不息');">

           </form>

           <form>

              <input type="button" value="测试4--传递4个参数"

                onClick="JavaScript: needTwoPara('smallerpig','小小猪','生命不息','学习不止');">

           </form>

        

        </body>

    </html>

    点击第一个按钮的返回结果:

    我是个需要2个参数的函数

    您输入的参数的个数为:1

    1个参数为:smallerpig

    以上是用arguments来获得参数

    下面用变量来获得参数:

    p1:smallerpig

    p2:undefined

    点击第二个按钮的返回结果:

    我是个需要2个参数的函数

    您输入的参数的个数为:2

    1个参数为:smallerpig

    2个参数为:小小猪

    以上是用arguments来获得参数

    下面用变量来获得参数:

    p1:smallerpig

    p2:小小猪

    点击第三个按钮的返回结果:

    我是个需要2个参数的函数

    您输入的参数的个数为:3

    1个参数为:smallerpig

    2个参数为:小小猪

    3个参数为:生命不息

    以上是用arguments来获得参数

    下面用变量来获得参数:

    p1:smallerpig

    p2:小小猪

    点击第四个按钮的返回结果:

    我是个需要2个参数的函数

    您输入的参数的个数为:4

    1个参数为:smallerpig

    2个参数为:小小猪

    3个参数为:生命不息

    4个参数为:学习不止

    以上是用arguments来获得参数

    下面用变量来获得参数:

    p1:smallerpig

    p2:小小猪

    理解原因:

    ECMAScript函数的参数与大多数其他语言中的函数的参数有所不同。ECMAScript函数不介意传递进来多少个参数,也不在乎穿进来参数是什么数据类型。也就是是说,即便你定义的函数值接受两个参数,在调用这个函数时也未必一定要是两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不会有什么怨言。之所以会这样,原因是ECMAScript中的参数在内部是用一个数组来运行的。函数接受到的永远是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。如果这个数组中不包含任何元素,无所谓;如果包含多个元素,也没问题。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给含糊的每一个参数。

  • 相关阅读:
    【C++】C++代码动态检查
    【加解密】使用CFSSL生成证书并使用gRPC验证证书
    分库分表下跨库join解决方案
    解决1235
    为什么v-for中的key值不推荐使用index
    弹性布局公共样式总结
    关于python的模块
    [转]Ubuntu18.04安装uwsgi错误:error: lto-wrapper failed collect2: error: ld returned 1 exit status
    python 坐标遍历 生成笛卡尔积矩阵
    Mongo BsonUndefined 转换问题(自定义Mongo类型转换器)
  • 原文地址:https://www.cnblogs.com/ranyonsue/p/13914334.html
Copyright © 2020-2023  润新知