暴打javascript语法之——函数概念+返回值+参数问题+arguments问题+举例分析

⛅Hello,大家好,这里是X,今天带来的是javascript函数问题,说到函数,我相信大家都不陌生了,它对于任何语言来说都是一个核心的概念,但是在javascript中呢,函数这一部分,又有点不一样,那么今天就带来这方面的讲解,感兴趣的,别忘了点赞+收藏噢😎

在这里插入图片描述
在这里插入图片描述

普通函数

在这里插入图片描述

原型

function fun(arg0,arg1,...,argN){
	statements;
}

例子

html

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>demo-01</title>
    <script type="text/javascript" src="./js/demo01.js">
    </script>
    </head>
<body>

</body>
</html>

js

function demo01(name, message){
    alert("Hello"+name+","+message);
}
demo01("monster","here is demo01");//调用函数

效果
在这里插入图片描述

总结

关于return语句

在这里插入图片描述
在javascript也是一样,在定义函数的时候不必指定是否有返回值,关于返回值:

  • 可以单个
  • 可以多个
  • 可以没有返回值

推荐的做法就是要么让函数始终都返回一个值,要么永远都不要有返回值
🤔🤔🤔
在这里插入图片描述

关于函数参数的各种问题

前景知识

在JavaScript中函数的参数和其他的语言的函数参数有所不同,那就是JavaScript中函数不介意传递进来多个参数,也不在乎传进来的参数是什么返回值
举个例子
一个函数,你写了3个参数,那你在调用这个函数的时候,不一定就要传递3个参数,传递1个、2、3个甚至不传参数都可以!

深入一下理解其中原理

为什么在JavaScript中可以对函数参数的限制那么的“宽松”呢?和我们平时接触到的函数非常的不一样!不管是C语言还是Java,对于函数参数的定义都是非常严格的,特别是C语言,因为C语言还会扯到指针😫,所以每个参数都是必须要一一对应才行,但是在JavaScript中之所以不需要的原因就是因为 在JavaScript中所有的参数在内部是用一个数组来表示的,写的每一个函数接收到的不是你传过来的参数,而是去接触这个数组!所以函数不关心数组中包含了哪些参数,如果说这个数组不包含任何元素,也无所谓,如果很多参数,也没问题! 那么我们该怎么去访问这个数组呢?

我们通过arguments对象去访问这个数组,至于这个参数的问题,我下面举几个有意思的例子

例子💭💭💭💭💭

下面的函数sayhi()函数根本就没有参数的选项,但是我的输出,是有参数的!

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>JavaScript参数问题</title>
		<script type="text/javascript">
			function sayhi(){
				alert("hi"+","+arguments[0]+","+arguments[1]);
			}
			sayhi("xmonster","good");
		</script>
		
	</head>
	<body>
		
	</body>
</html>

效果

在这里插入图片描述
再来一个例子深入一下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>JavaScript参数问题</title>
		<script type="text/javascript">

			function howManyArgs(){
				alert(arguments.length);
			}
			howManyArgs("xmonster",1);
		</script>
		
	</head>
	<body>
		
	</body>
</html>

效果

在这里插入图片描述
在这里的原理大家都懂,和上一个例子差不多,那么现在我们去解析在JavaScript内部的arguments数组里,到底是什么样的

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>JavaScript参数问题</title>
		<script type="text/javascript">

			function howManyArgs(){
				alert(arguments.length);
			}
			
			function doSum(){
				if(arguments.length==1){
					alert("arguments now have"+arguments[0]);	
				}
			}
			howManyArgs("xmonster");
			doSum(10);
			
		</script>
		
	</head>
	<body>
		
	</body>
</html>

结果

在这里插入图片描述
在这里插入图片描述
独自意会一番噢
那么现在有一个问题就是,在上面的例子里我是没有加参数的,那如果我在函数体内定义了argument的某一个值,但是传参的时候我传的又是其他的值,那么系统会遵循哪一个呢?

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>JavaScript参数问题</title>
		<script type="text/javascript">
			function whichArgu(num1, num2){
				arguments[0] = 1;//在这里写死arguments[0],也就是第一个参数的值
				alert(num1+num2);
			}
			whichArgu(2, 3);	
		</script>
		
	</head>
	<body>
		
	</body>
</html>

结果

在这里插入图片描述
可以看到我们得到的结果不是5,而是4,说明argument还是非常的强大的!
但是要注意一个非常重要的点,那就是argument的值和num1的值,这两个值的 内存空间是独立的 ,只是它们的值会同步,仅此而已!这也得到了:修改命名参数不会改变arguments中对应的值,还有一点要注意❗❗❗,如果说只是传了一个参数过去,那么arguments[1]的值不会反映到命名参数中的,因为arguments的对象的长度由传入的参数个数决定,不是由命名参数个数决定!
最后,再说一个知识点:
💢在JavaScript中,所有的参数传递的都是值,不可能通过引用传递参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是X大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值