js 函数调用带参数和不带参数的区别

如果调用的函数不用参数实现什么功能,可以直接调用func(),不用带参数;

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

 

<html>
  <head>
    <title>
      函数调用测试,参数个数和函数声明不一样多
    </title>
  
    <script language="javascript">
      function  needtwopara(p1,p2){
                var a=arguments;
                var result='我是个需要2个参数的函数\n'
                                     +'您输入的参数的个数为:'+a.length+'\n'
                for(var i=0, len = a.length; i < len; i++){
                        result=result+'第'+(i+1)+'个参数为:'+a[i]+'\n'
                    }
                result+='以上是用arguments来获得参数\n';
                result+='下面用变量来获得参数:\n';
                result+='p1:'+p1+'\n';
                result+='p2:'+p2+'\n';
            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:小小猪

理解原因:

js函数的参数与大多数其他语言中的函数的参数有所不同。js函数不介意传递进来多少个

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

posted @ 2016-01-19 10:36  张主任好  阅读(11490)  评论(0编辑  收藏  举报