二十、用函数实现模块化程序设计
20.1 函数的初步
用function
关键字定义一个函数。所谓的函数,就是一些语句的封装。函数必须调用才能够执行里面的语句。
函数不调用等于白写!!!
函数有两步:定义和调用
1 | <script> |
上面的程序,使用function
关键字定义了一个函数。function
后面加空格
,再加函数名字
,跟一个圆括号
。
1 | function 名字(){ |
函数里面的语句不会执行,必须等到函数被调用。加圆括号就表示调用函数。
1 | 函数(); |
20.2 认识函数的参数
1 | <script> |
JavaScript
中,传参数,全凭自觉。如果参数传的数量不够,或者多了,都不会报错。但是引发程序的不符合预测的运转。
多一个形参,就要多一个实参
1 | <script> |
20.3 return
函数的返回值
函数内部可以有return
,表示函数的返回值。
一个函数,如果遇见了return
语句,则不再继续执行函数体内的其他语句。
如果调用一个内部写了return
的函数,必须用变量接收它!!!
1 | <script> |
此时运行sum不会有任何弹出
1 | <script> |
1 | <script> |
1 | <script> |
20.4 为什么要有函数?认识函数的黑箱特性、轮子。
工作时,你的公司以前的项目或多或少封装过一些函数。这些函数普遍提供一些基本功能,比如验证身份证号码是否合规、手机号码是否合规。这些函数,术语叫做“轮子”。
函数只需要关注它需要传入什么,返回什么即可,不需要关心它内部的语法。
比如,网上找一个判断身份证的:
1 | function checkID(idnumber){ |
我们只需要用:
1 | var result = checkID(444444199909096666); |
例1:写一个函数,这个函数能够返回 a 和 b 之间所有数字的和
1 | <script> |
例2:写一个函数,判断字符串 a 中有没有 b 字符
1 | <script> |
20.5 为什么要有函数?函数能够拆分逻辑,从大逻辑变化为小逻辑
例1:寻找100~999以内的喇叭花数。
喇叭花数特点:各个数位的阶乘的和,等于它本身。
什么叫做阶乘?比如4的阶乘就是432*1等于24
大逻辑:寻找喇叭花数————→小逻辑:先封装一个函数,能够返回a的阶乘
首先封装一个函数
1 | <script> |
在控制台进行测试:
1 | <script> |
例2:输入一个三位数,判断是不是喇叭花数
1 | <script> |
20.6 为什么要有函数?方便制作功能的递进
例1:列出1~50中所有偶数拆分为两个质数和(哥德巴赫猜想)
1 | // 检测 a 是不是质数,函数返回布尔值 |
测试:
递进:
一个函数的基础上,可以演变为更高级别的函数
1 | // 检测 a b 是不是都是质数 |
测试:
1 | // 这个函数能够把 n 最小(左边值最小)的一组和(都是质数)输出 |
测试:
1 | <script> |
例2:输入一个偶数,给出拆分为两个质数和(哥德巴赫猜想)
1 | <script> |
20.7 递归函数和递进函数
20.7.1 递归函数
递归函数:在函数内部调用自身,一般解决数学问题
案例:斐波那契数列
斐波那契数列:1,1,2,3,5,8,13,21,34,……
1 | <script> |
20.7.2 递进函数
递进函数:一个函数的基础上,可以演变为更高级别的函数
案例:哥德巴赫猜想
哥德巴赫猜想:列出1~50中所有偶数拆分为两个质数和
1 | <script> |