因为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个参数的函数\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>

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

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对象来访问这个参数数组,从而获取传递给含糊的每一个参数。

js函数定义参数个数和实际传入参数的对比的更多相关文章

  1. js函数定义 参数只要写名称就可以了

    js函数定义  参数只要写名称就可以了 以下为标准: function add(type)  { } 不要写成下面这个样子 function add(var type)  { } 哎 妹的  老何ja ...

  2. js 函数定义的方式

    js 函数定义的方式 一.总结 一句话总结: 最常见就下面三种 最常见:function func1([参数]){/*函数体*/} 将匿名函数赋值给变量:var func2=function([参数] ...

  3. js 函数定义三种方式

    <p>Js 函数定义的三种方式:</p> <br> <p>方式一:function</p> <script type="te ...

  4. js加载事件和js函数定义

    一  dom文档树加载完之后执行一个函数 在Dom加载完成后执行函数,下面这三个的作用是一样的,window.onload 是JavaScript的,window.onload是在dom文档树加载完和 ...

  5. js 函数定义的2种方式

      js 函数定义的2种方式 CreateTime--2018年3月29日18:36:14 Author:Marydon 方式一: /** * 函数式声明 */ function mode() { c ...

  6. SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer);

    SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer); 第一种方法: 如果你 ...

  7. js函数定义和调用

    由于JavaScript的函数也是一个对象,上述定义的abs()函数实际上是一个函数对象,而函数名abs可以视为指向该函数的变量. var abs = function (x) { if (x > ...

  8. js函数定义方法

    1.函数声明 其语法为 function functionName(){ //函数体 } 首先是function关键字,然后是函数名,其重要特征是函数声明提升,即在执行代码之前会先读取函数声明,使其在 ...

  9. JS函数定义与匿名函数的调用

    一.函数声明.函数表达式.匿名函数 函数声明:function fnName () {…};使用function关键字 声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName ...

随机推荐

  1. python classmethod方法 和 staticmethod

    classmethod() 是一个类方法,用来装饰对应的函数.被classmethod 装饰之后就无需实例化,也不需要在函数中传self,但是被装饰的函数第一个参数需要是cls来表示自身类.可以用来调 ...

  2. EasyPusher华为手机直播推流硬编码[OMX.IMG.TOPAZ.Encoder] failed to set input port definition parameters.

    EasyPusher作为一款RTSP推送利器, 配合EasyDarwin开源流媒体服务器,在发布伊始,很快获得了广大人民群众的一致好评. 但是也有一些用户反映: EasyPusher在我的华为手机上会 ...

  3. Android笔记之ViewModel的使用示例

    依赖 implementation 'android.arch.lifecycle:extensions:1.1.1' implementation 'com.squareup.retrofit2:r ...

  4. WordPress升级出现Briefly unavailable for scheduled maintenance. Check back in a minute.

    WordPress升级出现Briefly unavailable for scheduled maintenance. Check back in a minute.   打开博客时提示: Brief ...

  5. SQL 中GROUP BY 、ROLLUP、CUBE 关系和区别

    转自:http://www.cnblogs.com/dyufei/archive/2009/11/12/2573974.html 不言自明,看SQL就完全理解了,不需要过多解释,不错,分享之: ROL ...

  6. .idea文件夹是干嘛的

    question python为什么每次创建的文件目录下都含有.idea/文件夹,该文件夹又是用来干嘛的 answer 当使用pycharm作为IDE时,会自动生成.idea/文件夹来存放项目的配置信 ...

  7. Java基础教程:面向对象编程[1]

    Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...

  8. Android Weekly Notes Issue #322

    Android Weekly Issue #322 August 12th, 2018 Android Weekly Issue #322. 本期内容包括: 键盘的图像支持; 网络安全实现; Kotl ...

  9. Git查看并修改name和email

    显示name的方法: git config user.name git config --list 或者查看~/.gitconfig文件. 改名字: git config --global user. ...

  10. 使用python转换编码格式

    之前有写过一个使用powershell转换文档格式的方法,然而因为powershell支持不是很全,所以并不好用.这里使用python再做一个. 思路 检测源码格式,如果不是utf8,则进行转换,否则 ...