关于Js中函数形参与实参的个数问题

关于Js中函数形参与实参的个数问题

       我们知道,在C语言或者C++中,调用函数时,实参和形参之间的类型、顺序不仅要一一匹配,而且实参和形参的个数也要相等。如果想要达到实参和形参个数不相等的效果,那么就得做函数重载。了解过的朋友应该都知道,这样做是很麻烦很麻烦的。

       而在JavaScript里,情况是不是也是这样呢?本文就来讨论一下这个问题,帮助大家答疑解惑。

先来上一段示例代码

<body>
	<h1></h1>
	<script>
		var result = document.querySelector('h1');
		function calculate(a,b) {
			var c = a + b;
			return c;
		}
		
		function show(x,y) {
			var content = x + '+' + y + '=' + calculate(x,y);
			result.innerHTML = content;
		}
		
		show(2,6);
	</script>
</body>

当实参个数和形参个数一样时,想必难不倒大家吧,结果如下:
在这里插入图片描述
那么当实参个数 < 形参个数是,结果会是怎样呢?

show(2);

锵锵锵!
在这里插入图片描述
可以看到,虽然实际参数比形式参数少了一个,但控制台并没有报出任何错误信息,证明这是符合js语法的。
由于函数找不到第二个参数,所以输出undefined(未定义),当undefined类型数据和一个数值类型数据进行运算时,undefined先转换成数值类型NaN(非数值),然后NaN和一个数值类型数据运算,结果还是NaN。

当实参个数 > 大于形参个数时。。。。。
嘿嘿,大家来猜猜结果是啥?

show(2,8,4);

噔噔噔!
在这里插入图片描述
没错!函数直接忽视后面多出来的实参啦
无论你后面加多少个实参,它都只匹配和形参数量相等的前面几个。

以上结果表明

调用函数传递的实参与定义函数规定的形参是依次对应的,即第1个实参的值传递给第1个形参,第2个实参的值传递给第2个形参…
超出形参数目的实参不传递其值。
如果没有对应的实参(实参数目少于形参数目)传入,其值为undefined。

引用自 https://www.jianshu.com/p/10fb380a464b

建议

调用函数时传递的实参数目可以大于形参数目,但是最好不要小于形参数目。

原理

这么说 js 还真是一位慈祥的母亲呢,包容孩子的大小过错hhhhhhhhhhh。
嗯,没错。。。C语言是位严父(滚)
为什么 js 能达到如此神奇的效果?
这个故事嘛emmm
原来。。。很久很久以前。。。(笑)

在 js中,参数在内部是用一个数组来表示。函数接收到的始终是这个数组,而不关心数组中包含哪些参数,如果这个数组不包含任何参数也无所谓,包含多个参数也没问题。

引用自 https://www.jianshu.com/p/7049dab6a9b2
故事讲完了,谢谢大家
谢幕~
熄灯~

发布了20 篇原创文章 · 获赞 6 · 访问量 4042

猜你喜欢

转载自blog.csdn.net/CanMoHaiYan/article/details/91347317