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个参数的函数\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中参数不对应问题的更多相关文章
- js函数中参数的传递
数据类型 在 javascript 中数据类型可以分为两类: 基本类型值 primitive type,比如Undefined,Null,Boolean,Number,String. 引用类型值,也就 ...
- JS 中没有按地址(引用)传递,只有按值传递
很多人,包括我,受书本知识消化不彻底的影响,认为 JS 中参数有两种传递方式:数字.字符串等按值传递:数组.对象等按地址(引用)传递.对此种观点,我们要谨慎. var v1 = [] var v2 = ...
- JS中的Map和Set实现映射对象
使用iterable内置的forEach方法 var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) { // elem ...
- JS中如何获取当前时间及让时间格式化
JS中获取当前时间和JAVA里获取当前时间一样,都是直接new Date即可.不同的是,JS中用var date=new Date();JAVA中用Data data=new Date();注:JS中 ...
- JS中的Map和Set
使用iterable内置的forEach方法 var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) { // elem ...
- php与js中函数参数的默认值设置
php函数参数默认值设置: <?phpfunction test($val=3){ echo $val."<br/>";}test(11);test();?& ...
- JS中的函数(二):函数参数(你可能不知道的参数传递)
前言: 函数分为有参有返回值,有参无返回值,无参无返回值,无参有返回值:那么对于无参数的函数你想使用函数的调用怎么办呢?如果你想封装一个代码,实现多种功能,但是形参大于实参或者实参大于形参又该如何?本 ...
- js中function参数默认值
--在dreamweaver做网站时,函数定义是在一个*.js文件中,其中定义了一个func,有四个参数,function func(string1,url,flag,icon),然后在另一个asp中 ...
- 在js中获取get参数(仿PHP)
复制粘贴即可..然后就可以在js中像PHP用$_GET['name']这样子获取get参数了!! /*--------------------(返回 $_GET 对象, 仿PHP模式)-------- ...
随机推荐
- C#给PDF文档添加文本和图片页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- JAVA语言中的修饰符
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
- C# 利用性能计数器监控网络状态
本例是利用C#中的性能计数器(PerformanceCounter)监控网络的状态.并能够直观的展现出来 涉及到的知识点: PerformanceCounter,表示 Windows NT 性能计数器 ...
- JavaScript中Math对象的方法介绍
1.比较最值方法 比较最值有两种方法,max() 和 min() 方法. 1.1 max() 方法,比较一组数值中的最大值,返回最大值. var maxnum = Math.max(12,6,43,5 ...
- AutoMapper随笔记
平台之大势何人能挡? 带着你的Net飞奔吧! http://www.cnblogs.com/dunitian/p/4822808.html#skill 先看效果:(完整Demo:https://git ...
- AutoMapper:Unmapped members were found. Review the types and members below. Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type
异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 应用场景:ViewModel==>Mode映射的时候出错 AutoMappe ...
- scp报错 -bash: scp: command not found
环境:RHEL6.5 使用scp命令报错: [root@oradb23 media]# scp /etc/hosts oradb24:/etc/ -bash: scp: command not fou ...
- winform异步加载数据到界面
做一个学习记录. 有两个需求: 1.点击按钮,异步加载数据,不卡顿UI. 2.把获取的数据加载到gridview上面. 对于需求1,2,代码如下: public delegate void ShowD ...
- nodejs操作arduino入门(javascript操作底层硬件)
用Javascript来操作硬件早就不是一件稀奇的事情了. 所以作为一名电子专业出身的FE,我也打算尝试一下用js来驱动arduino: 要想操作这些底层硬件,肯定是需要一些工具的,我这里介绍的工具主 ...
- web服务器集群
概述 集群和分布式都是从集中式进化而来的.分布式和集群会相互合作的,同时的集群和分布式.在这里重点说说集群 集群是什么? 集群能提高单位时间内处理的任务数量,提升服务器性能 有多台服务器去处理任务,但 ...