因为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. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  2. 快速构建H5单页面切换骨架

    在Web App和Hybrid App横行的时代,为了拥有更好的用户体验,单页面应用顺势而生,单页面应用简称`SPA`,即Single Page Application,就是只有一个HTML页面的应用 ...

  3. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  4. 02.LoT.UI 前后台通用框架分解系列之——灵活的菜单栏

    LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...

  5. Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法

    本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...

  6. .Net 分布式云平台基础服务建设说明概要

    1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根 ...

  7. 【开源】.Net Api开放接口文档网站

    开源地址:http://git.oschina.net/chejiangyi/ApiView 开源QQ群: .net 开源基础服务  238543768 ApiView .net api的接口文档查看 ...

  8. 【NLP】前戏:一起走进条件随机场(一)

    前戏:一起走进条件随机场 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都有 ...

  9. CSS——关于z-index及层叠上下文(stacking context)

    以下内容根据CSS规范翻译. z-index 'z-index'Value: auto | <integer> | inheritInitial: autoApplies to: posi ...

  10. animate.css(第三方动画使用方法)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Monaco; color: #a5b2b9 } animation 语法: animatio ...