第八章

248 阅读3分钟

函数

函数就是功能,将一些语句书写在函数内部,可以完成某种功能

函数声明:

function 空格隔开函数名后面紧跟小括号,小括号中可以书写参数,将功能语句书写在大括号中;

函数声明只是告诉我们函数有什么功能,有什么语句,并不会执行!!!

函数调用

函数声明不执行,必须要调用

调用函数:函数名();

函数是一个整体,调用整个大括号都会执行。(按js顺序)

声明一次可以多次调用

函数优点:函数声明依次可以多次调用,简化代码书写

参数

函数可以帮我们封装一些语句,函数留了一些接口,这些接口就是参数,通过不同参数函数完成不同的功能

形式参数:函数在声明时,小括号中书写的是形参

实际参数:函数在执行时,小括号中书写的是实参

传参:函数调用时,将实际参数赋值给形式参数的过程。

js是动态语言,参数的数据类型也是动态变化的,取决于实际参数类型

实际参数和形式参数个数问题:

函数内部有一个类数组对象,arguments保存的是实际参数

实际参数个数<形式参数个数优先将实参赋值给前面的形参,没有赋值结果undefined

实际参数个数>形式参数个数,将多余实际参数直接舍弃

函数的优点

函数有参数,相当于给我们提供一个API接口,我们可以通过接口去调用函数执行不同的操作。后面封装函数的时候只需要了解API的用途就够了。就是传参之后有什么结果,不用去了解函数里面的构造,不论是自己的函数还是用别人的封装好的函数都只需要知道怎么用就够了。

可以将一个函数作为返回值,传递给另外一个函数,有利于模块化编程

return

返回值:可以接受参数,作为函数的返回值。返回值不会输出。

看输出结果console.log();

函数可以利用return将函数矮化表达式,作为实际参数进行传递

return特性:函数内部遇见return会立即返回,后面语句不会再执行!!!

模块化编程

案例:输出1000以质数

代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	<script type="text/javascript">
//约数个数
	function yueshugeshu(num)
	{
		//输入num,返回一个总个数
		//累加器
		var sum=0;
		for(var i=1;i<=num;i++)
		{
			if(num%i==0)
			{
				sum++;
			}
		}
		return sum;
	}
	console.log(yueshugeshu(8));

//判断是不是质数

	function zhishu(a){
		if(yueshugeshu(a)==2)
		{
			return true;
		}else{
			return false;
		}	
	}
	console.log(zhishu(10));

//输出100以内质数

	for(var i=1;i<=100;i++)
	{
		if(zhishu(i)){
			console.log(i);
		}
	}
	</script>
</body>
</html>

完美数

代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	<script type="text/javascript">

	function yueshuhe(a)
	{
		//求约数和
		var sum=0;
		for(var i=1;i<a;i++)
		{
			if(a%i==0)
			{
				sum+=i;
			}
		}
		return sum;
	}
	console.log(yueshuhe(8));

//判断是不是完美数

	function wanmeishu(b){
		if(yueshuhe(b)==b)
		{
			return true;
		}else{
			return false;
		}	
	}
	console.log(wanmeishu(14));

//输出1-n以内完美数
	function shuchu(n)
	{
		for(var i=1;i<=n;i++)
		{
			if(wanmeishu(i)){
				console.log(i);
			}
		}
    }
   //调用
   shuchu(10000);
	</script>
</body>
</html>