函数就是把特定功能的代码抽取出来,使之成为程序中一个独立实体
正如函数的概念,我们可以根据需要,将特定的功能用函数来包裹(封装)
1,函数可以在同一个程序或其他程序中多次重复使用(通过函数名调用)
2,使程序变得简短而清晰,提高可读性
3,有利于程序维护
函数的分类
函数可以分为:系统函数 内置函数 和 自定义函数
系统函数, 内置函数:
是官方提供好的函数,可以直接使用
如:alert() isNaN()等等
自定义函数:
是用户自己定义的函数,用户可以根据实际需求,对特定的功能使用函数来封装
定义函数的语法格式:
function 函数名() {
代码块;
}
注意:1,必须使用function关键字,且为小写,函数名可以自己给定
2,函数名的命名规则和变量名一致
3,函数名后必须写圆括号()
函数的调用方式:函数名()
如:: 调用下面的函数: printOut();
function printOut(){
document.write(“Hello World!”);
}
注意:1,调用函数后会执行函数内部的代码块
2,函数在不调用的情况下是不会执行的,只有调用后函数中的代码才会执行
定义函数的语法格式
function 函数名(参数1,参数2,……) {
执行语句; return 返回值;
}
注意: 1, 函数名后圆括号()中的参数数量不定, 也可以没有; (根据功能需要)
2, return关键字的作用是将某个值返回, 如果没有返回值则默认返回undefined
函数中的arguments数组:
JS中函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型,在调用函数时也未必一定要传递指定数量的参数,原因是 ECMAScript 中的参数在内部是用一个数组(arguments)来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。 arguments可以判断参数的个数,arguments是个数组(后面会详细讲解数组)。
我们可以使用arguments.length来获取参数的个数
可以使用arguments[i] 的方式来访问数组中的第i个参数(i为自己给定的整数下标)
作用域: 就是起作用的范围。或者说有效范围; 这里涉及到另外两个概念
局部变量: 定义在函数内部的变量,这个变量只能在函数内部使用,即作用域范围只是函数内部,另外,形参也是局部变量.
全局变量: 全局变量就是定义在函数外部的变量,这个变量在任何函数中都有效,即作用域范围是当前文件的任何地方.
注意: 在定义变量时, 如果不写关键字var也是合法的, 且是全局变量, 但是这样写不安全,容易在其他地方被更改, 所以我们在函数中写变量要加上var
函数的嵌套:
函数的嵌套: 函数内部可以再包含其他函数;
函数之间允许相互调用,也允许向外调用, 但是不可以调用同级函数的嵌套函数
事件驱动:
因为函数不会主动执行, 只有当调用的时候才会执行函数中的代码, 在前面的dom操作示例中,我们点击了按钮才触发函数调用
所有的函数,没有调用不会执行,那么在我们浏览器中函数调用的源头在何处,就是事件, 只有使用事件去驱动, 函数才被调用; 如: onclick: 点击事件
递归调用: 函数可以自己调用自己,必须要有结束条件,称为函数的递归调用;
重要性:
递归的分量,递归属于函数中比较难理解的知识,在应用开发中,虽然使用不是很频繁,但是很体现你的功底,而且,从事IT行业开发,最好要会递归,如果说现在可以不要求灵活运用的话,以后到公司中一定要会,如果面试中有人问你递归,说明,他对你要求挺高
递归调用的方式:
1. 首先去找临界值,即无需计算,获得的值(一般是返回该值)。
2. 找这一次和上一次的关系(一般从后往前找)
3. 假设当前函数已经可以使用,调用自身计算上一次的运行结果,再写出这次的运行结果。