zoukankan      html  css  js  c++  java
  • js函数定义参数个数和实际传入参数的对比

    因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java和C#一样对其传入参数的类型进行定义。那么传入参数的个数有没有影响呢?今天小猪就做了个实验。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <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>

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

    1
    2
    3
    4
    5
    6
    7
    我是个需要2个参数的函数
    您输入的参数的个数为:1
    1个参数为:smallerpig
    以上是用arguments来获得参数
    下面用变量来获得参数:
    p1:smallerpig
    p2:undefined

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

    1
    2
    3
    4
    5
    6
    7
    8
    我是个需要2个参数的函数
    您输入的参数的个数为:2
    1个参数为:smallerpig
    2个参数为:小小猪
    以上是用arguments来获得参数
    下面用变量来获得参数:
    p1:smallerpig
    p2:小小猪

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    我是个需要2个参数的函数
    您输入的参数的个数为:3
    1个参数为:smallerpig
    2个参数为:小小猪
    3个参数为:生命不息
    以上是用arguments来获得参数
    下面用变量来获得参数:
    p1:smallerpig
    p2:小小猪

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    我是个需要2个参数的函数
    您输入的参数的个数为:4
    1个参数为:smallerpig
    2个参数为:小小猪
    3个参数为:生命不息
    4个参数为:学习不止
    以上是用arguments来获得参数
    下面用变量来获得参数:
    p1:smallerpig
    p2:小小猪

    理解原因:

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

  • 相关阅读:
    JSON跨域请求
    2013.9.26 心得体会
    MemCached用法
    使用SQL联合查询来构建临时vo对象的应用
    ubuntu 16.04 安装php 5 6等版本
    mac php版本切换
    windows 查看端口占用
    nginx 反向代理到目录
    linux挂在samba服务器到本地(用于备份文件到nas或者windows的文件服务器)
    ubuntu 加载新硬盘或分区
  • 原文地址:https://www.cnblogs.com/keyi/p/7110254.html
Copyright © 2011-2022 走看看