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