因为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函数中参数的传递

    数据类型 在 javascript 中数据类型可以分为两类: 基本类型值 primitive type,比如Undefined,Null,Boolean,Number,String. 引用类型值,也就 ...

  2. JS 中没有按地址(引用)传递,只有按值传递

    很多人,包括我,受书本知识消化不彻底的影响,认为 JS 中参数有两种传递方式:数字.字符串等按值传递:数组.对象等按地址(引用)传递.对此种观点,我们要谨慎. var v1 = [] var v2 = ...

  3. JS中的Map和Set实现映射对象

    使用iterable内置的forEach方法 var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) { // elem ...

  4. JS中如何获取当前时间及让时间格式化

    JS中获取当前时间和JAVA里获取当前时间一样,都是直接new Date即可.不同的是,JS中用var date=new Date();JAVA中用Data data=new Date();注:JS中 ...

  5. JS中的Map和Set

    使用iterable内置的forEach方法 var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) { // elem ...

  6. php与js中函数参数的默认值设置

    php函数参数默认值设置: <?phpfunction test($val=3){   echo $val."<br/>";}test(11);test();?& ...

  7. JS中的函数(二):函数参数(你可能不知道的参数传递)

    前言: 函数分为有参有返回值,有参无返回值,无参无返回值,无参有返回值:那么对于无参数的函数你想使用函数的调用怎么办呢?如果你想封装一个代码,实现多种功能,但是形参大于实参或者实参大于形参又该如何?本 ...

  8. js中function参数默认值

    --在dreamweaver做网站时,函数定义是在一个*.js文件中,其中定义了一个func,有四个参数,function func(string1,url,flag,icon),然后在另一个asp中 ...

  9. 在js中获取get参数(仿PHP)

    复制粘贴即可..然后就可以在js中像PHP用$_GET['name']这样子获取get参数了!! /*--------------------(返回 $_GET 对象, 仿PHP模式)-------- ...

随机推荐

  1. GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级

    一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...

  2. 移动端访问PC站点时自动跳转至移动站点

    方法一: 百度Site APP的uaredirect.js 实现手机访问,自动跳转 <script src="http://siteapp.baidu.com/static/webap ...

  3. Maven仓库搭建和配置

    maven在本地搭建仓库的实际需求maven在项目构建过程需要下载一些必要的软件包,这些默认的下载链接都是访问maven的远程中央仓库Central Repo.如果项目中的成员,每次第一次构建的时候都 ...

  4. 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'T_Shell' 中的标识列插入显式值。

    --允许将显示值插入表的标识列中-ON:允许 OFF:不允许set identity_insert T_shell ONset identity_insert T_Shell OFF

  5. mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!

    mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法! 修改mysql5.7的配置文件即可解决,方法如下: linux版:找到mysql的安装路径进入默认的为/usr/shar ...

  6. java I/O流

    输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...

  7. ASP.NET Core 在 JSON 文件中配置依赖注入

    前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等 ...

  8. CentOS7 安装Mono及Jexus

    CentOS7安装Mono及Juxes 1 安装Mono 1.1 安装yum-utils 因为安装要用到yum-config-manager,默认是没有安装的,所以要先安装yum-utils包.命令如 ...

  9. 续 CentOS7(mini) 运行MVC5 + Mariadb

    上一篇,介绍了在CentOS7上使用mono官方二进制安装包快速安装mono环境 并且成功运行了一个Owin自宿主应用(Booker) 由于Owin自宿主应用不需要System.Web的支持,所以可以 ...

  10. Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器

    最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流 ...