函数
作用:
在任意功能的代码进行封装,在需要时进行调用
像一个盒子,盒子里面封装代码,通过盒子名称找到盒子执行里面的代码
语法:
function 函数名(){
封装代码
}
函数名()//函数调用语句
// 定义一个名为fun的函数
function fun(){
console.log("第一个函数");
}
fun()//函数调用语句
封装函数
// 封装 求两个数最大值54,67的函数
//定义名为getMax的函数
function getMax() {
var m = 54
var n = 67
var max = m
if (n > max) {
max = n
}
console.log('最大值是 ', max)
}
//封装判断闰年的函数名为 isLeapYear
function isLeapYear() {
var year = 2022
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
console.log(year + '是闰年')
} else {
console.log(year + '不是闰年')
}
}
getMax()
isLeapYear()
函数的参数
function 函数名(m){ ->形参
函数体
}
函数名(100) ->实参
1.形参:定义函数时在函数括号内定义的变量叫形参
2.实参:使用函数调用语句调用函数时传入的实际参数
封装函数的作用
封装代码,复用封装
函数的类型
根据函数的参数和返回值分为四类
1无参无返回值
function fun(){
函数体
}
fun()
2有参无返回值
function fun(){
函数体
}
fun(100)
3无参有返回值
function fun (){
函数体
return 值
}
var 变量 = fun()
4有参有返回值
function fun (形参1,形参2){
函数体
return 值
}
var 变量 = fun(实参1,实参2)
函数默认值
function fun(m){
m = m || 10 ->(函数默认值)
console.log(m)
}
fun()
预解析
=>浏览器javascript引擎解析执行javascritp代码
执行javascritp代码之前,扫描通读js代码,如果发现声明式函数和var声明的变量,将其提前
javascript源代码 -> 执行
预解析
1,声明式函数提前
2,var声明变量提前
注:声明式函数优先
作用域
变量起作用的范围
全局作用域和局部作用域
局部作用域:在函数体中起作用
全局作用域:整个js全局起作用
内层函数可以仿问外层函数作用域变量
外层函数可以仿问内层函数作用域变量
作用域规则
当前作用域找
如果当前作用域没找到,到上级作用域找
如果上级作用域没找到,接着向上找,直至全局作用域
如果全局作用域也没有,直接报错
赋值规则
赋值前在当前作用域查找
上级作用域查找,找到赋值
上级作用域查找,直至全局作用域
如果全局作用域也找不到直接创建全局变量
递归函数概念
=>的数自身调用自身这样的函数称为递归函数
=>注意;
要有递归结束的条件
要有改变递归条件的代码
递归解决哪些问题
后面的结果由前面推导出来,可以采用递归简化实现