目录
1.初识函数
【函数定义】
函数用于封装完成一段特定功能的代码
相当于将一条或多条语句组成的代码块封装起来。
用户在使用时只需要关心参数和返回值,就能完成特定的功能。
【内置函数】
isNaN是判断内容是否为非数字,非数字类型时取值为true,数字类型时取值为false
Number()可以将字符串类型转化为数字类型
parseInt()将小数点前面的内容转化为数字类型
【自定义函数】
可以提高代码的复用性,降低程序维护的难度
【函数格式】
语法:
function 函数名([参数1,参数2...]){
函数体
}
function name(params) {
}
function 指这是一个函数语句; name是函数名 ; params是函数参数; {}内放函数的具体功能
【无参函数】
函数封装
【有参函数】
需求:定义一个函数total,调用函数是传入price价钱、num数量,就可以计算并在页面上打印函数的总价all
【函数的返回值】
函数的返回值是指在函数调用后获得的数据,这个数据需要通过return关键字返回,让函数外可以拿到
函数total是在函数内部打印乘积,每次调用total函数就会执行一次打印命令
函数total1是在函数内部生成一个新的数值并通过return返回,在函数外拿到return返回的数据并打印
需求:定义一个函数,maxNum,求出任意两数的最大值
需求:定义一个函数getSum,可以求任意数组中每个项的和
需求:判断数组中是不是所有元素都是正数,不是则返回false
需求:找出数组元素为10的下标,有则返回该下标,没有则返回-1
【获取函数调动时,传递的所有实参】
扩展运算符(...)
argument对象
在开发时,如果不确定参的个数,可以不设置形参
在函数体中直接通过argument对象获取函数时调用时传递的形参
需求:
1.通过argument对象获取所有实际参数
2.对所有实参进行求和
2.函数进阶
【函数表达式】
函数表达式是指将函数值赋给变量的表达式
定义了函数表达式之后,不能再通过函数名调用函数
需要通过变量名调用函数
【匿名函数】
当使用函数表达式时,可以删除函数的名字
【箭头函数】
删除function关键字,在参数()和函数体{}之间放上=>
当函数体只有一句话时,可以省略return返回值和大括号
当函数只有一个参数时,可以省略小括号
3.回调函数
回调函数就是在a中,传入一个函数b作为参数,参数函数b就是回调函数。
需求:调用cal函数,完成num1和num2的取模运算/除法运算/
4.函数作用域
全局作用域:全局变量拥有全局作用域
全局变量:在函数体外声明的变量或在函数体内省略var关键字声明的变量
局部作用域:局部变量或者是函数变量拥有局部作用域
局部变量:在函数体内利用var关键字声明的变量
块级作用域:被块级变量所拥有,在分支语句或循环大括号中定义的变量,一般一个花括号{}为一个代码块
块级变量:let关键字声明的变量
5.定时器函数
定时器函数是异步代码,需要等全部同步代码执行完后执行
语法:
setTimeout(()=>{},timeout);
用来设置某个函数在多少毫秒之后执行
setInterval(()=>{},interval);
用来设置某个函数在多少时间间隔后反复执行
6.函数嵌套与作用域
变量访问规则:就近原则(处于同一作用域)
当在一个作用于中访问变量时,首先看当前作用域有没有声明
如果有则访问当前作用域的变量,如果没有则向上层作用域查找
直到达到顶层作用域没有变量声明时,则程序报错
7.闭包函数
闭包(close)函数:是一种代码形式,内部函数访问外部函数的局部变量
闭包的作用:将变量以函数的形式保护起来,解决变量污染问题
举例:
js函数outer中有一个函数inner,函数inner访问了函数outer定义的局部变量demo,此时就产生了闭包,变量所在的函数就是闭包函数,在这里,outer是闭包函数
8.递归函数
递归函数,一个函数间接或直接地调用自身
需求:设置一个getSum函数
写法一:
写法二:
写法三:
递归过程
getSum = 5
return 5 + getSum2(4)
return 5 + 4 + getSum2(3)
return 5 + 4 + 3 + getSum2(2)
return 5 + 4 + 3 + 2 + getSum2(1)
eturn 5 + 4 + 3 + 2 + 1 = 15