函数

函数

一、函数的概述:

函数就是把特定功能的代码抽取出来(多行代码的抽取),使之成为程序中的一个独立实体。(方法

二、函数的优点:

1, 函数可以在同一个程序或其他程序中多次重复使用(通过函数名调用)

2, 使程序变得更简短而清晰(特定的代码使用函数包起来也叫函数封装) , 提高可读性

3, 有利于程序维护

4、减少冗余代码(重复的代码放在函数里面,需要的时候调用)

三、函数的分类:

  • 系统函数 window里面所有的函数都属于系统函数(console.log() alert() prompt()....)

  • 内置函数 所有的内置对象里面的函数 都叫内置函数 (Math.pow())

  • 自定义函数 自己定义的函数,用户可以根据实际需求, 对特定的功能使用函数来封装

内置函数和系统函数我们更关注于它的使用 自定义函数(定义以及使用)

四、自定义函数的定义及调用

定义函数的语法格式:

function 函数名() {

  代码块;

}

注意:

1, 必须使用function关键字, 且为小写, 函数名可以自己给定

2, 函数名的命名规则和变量名一致

3, 函数名后必须写圆括号()

1、使用function关键词 定义匿名函数(没有名字的函数)

 匿名函数(声明比较少,他没有服用价值)

2、使用function关键词 定义具名函数(有名字的函数)

 3、使用 new Function方式

函数的嵌套 

注意事项:

函数的抽取(抽取冗余的代码)

  • 参数(可变的内容)

  • 返回值(我们想从这个函数得到什么

五、在程序执行之前有个预编译的过程

预编译会做的事情

1、他会声明对应的function和var关键词修饰的变量(开辟内存的操作)

2、对应的function的内存空间开辟以后他会将对应的代码块放到其中 等待调用

3、var修饰的关键词 只会开辟一个空间 并不会进行赋值(默认给他一个undifined的值)

return关键词

1、return返回对应的数据的 他是在函数内容进行数据返回的(当你调用了return操作后 后面的内容就不再执行了

 2、如果没有return关键词 返回的是一个undefined的值

 六、函数执行过程

1、把对应的开辟的function内存里面的代码块丢给方法栈(执行栈)去执行

2、执行栈就会自动去执行对应的方法 执行完返回对应的结果

3、当结果返回完毕以后 对应的执行栈里面的内存空间要进行回收(GC)将这个内存空间进行销毁

七、函数作用域

1、作用域

当前一个变量的作用范围 分为局部作用域在一个函数内声明的或者是在一段代码块内声明的他的作用范围就是当前的代码块)和全局作用域(在对应的全局声明的 他的作用范围就是全局的)

2、作用域链

当前的作用域内没有找到对应的变量就会向上寻找 而这个过程构成的链式结构称为作用域链

 

 

 八、函数的arguments(参数数组 参数的集合)

arguments是一个伪数组(有部分的数组特性)(可以通过length属性来获取对应的长度 []下标来访问里面的元素)

所有的函数都具备arguments(对象)

访问

  • 访问 length属性访问长度

  • []加下标(从0)开始访问里面的元素

九、Dom的简单操作

1、获取对应的标签(通过id获取)

 2、input框的值获取 value属性

 3、点击事件 onclick

 示例:

 

 十、递归算法

递归三要素

  • 找规律

  • 找临界值(没有规律的值)return

  • 自己调自己(在函数内部调用自己的函数)

递归调用的方式:

1. 首先去找临界值,即无需计算,获得的值(一般是返回该值)。

2. 找这一次和上一次的关系(一般从后往前找)

3. 假设当前函数已经可以使用,调用自身计算上一次的运行结果,再写出这次的运行结果。

示例:

1、2 4 6 8 10 第100位的值是什么

2、 1 3 6 10 15 第100位   前一位+对应的位数=这一位的值

 3、1 2 3 5 8 13 21 第100位 (递归的效率极低 一般使用递归不推荐(文件的遍历) 菜单的遍历 深拷贝)

bfs 广度优先搜索 dfs 深度优先搜索(递归思想)

十一、练习题:

1, 写一个函数计算1到n的和, 并返回结果打印出来;(n为函数参数)
2, 写一个函数计算n的阶乘,并返回结果打印出来
3, 写一个函数计算两个数的最小公倍数; 并返回结果打印出来

 4、写一个函数判断一个年份是不是闰年

 5、写一个函数判断一个数是不是素数 (又称质数,除了1和本身以外不再有其他数整除)

 6、年月日分别为自定义函数的参数,判断某一个日期是否为合法的日期;

        //  如: 2016年12月33日不是合法的日期
        //        2016年11月13日是合法的日期
方法1:

 

 方法2:

 7、 用递归实现:

 计算1+2+3+…+100的和
// 1 3 6 10 15 21 ==>当前位数+前面的值

 8、用递归实现:

输入一个n,打印n个hello world

 9、写个函数计算所有传入参数相乘的结果(参数数量不定)

 10、 写个函数实现加减乘除运算(两个操作数, 一个操作符)

 11、写个函数实现n的阶

 12、找出0-100之间7的倍数,和包含7的数字

 13、不用循环,计算0-100以内的数字和

 14、制作一个简易计算器(计算两个数的加减乘除, 带可手动输入数字和运算符)

 

 15、兔子繁殖问题,设有一只新生兔子,从第四个月开始他们每个月, 月初都生一只兔子, 新生的兔子从第四个月月初开始又每个月生一只兔子按此规律,并假定兔子没有死亡, n(n<=20)个月月末共有多少只兔子?

 

 假设三个月开始生崽
// 1 1 2 3 5 8
// 斐波那契数列又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

 

 

posted @   木木子夕  阅读(732)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示