Skip to content

函数

定义函数

plain
function 函数名(参数1,参数2,...){
    函数体
}

参数设置

  • 无参函数
  • 有参函数
  • 剩余参数

剩余参数

plain
function 函数名(...参数){
    函数体
}

作用域

函数是一个基本作用域

  • 全局变量
  • 局部变量
  • 块级变量

块级变量:let声明的变量,只在{}中有效

预解析

变量提升

变量提升到最上面
作用域才提升

垃圾回收

局部变量只在函数运行时存在,运行完毕后立即销毁,保存局部变量可以使用全局变量保存和return返回

匿名函数

没有名字的函数

箭头函数

函数名 = 参数 => 返回值

回调函数

方法功能
find()返回满足的第一个条件的元素
every()判断是否所有元素都满足条件
some()判断是否有元素满足条件
forEach()遍历数组
map()返回一个新数组,元素是原数组元素调用函数处理后的值
reduce()对数组元素进行计算,返回一个值
reduceRight()从右向左计算

函数嵌套

函数可以嵌套,嵌套的函数可以访问外层函数的变量,但是不能访问内层函数的变量

作用域链

函数执行时,会创建一个作用域链,作用域链中包含当前作用域,当前作用域的父作用域,直到全局作用域
找不到就返回上一层找,直到找到为止

闭包函数

  1. 函数外部访问函数内的变量
  2. 变量的值保存在内存中,不能被修改

一、定义与调用

1.定义

plain
function 函数名(参数1,参数2,...){
    函数体
}

2.参数

无参函数

javascript
function greet(){
    console.log("Hello");
}

有参函数

javascript
function max(a,b){
    return a>b?a:b;
}
max(5,9) // 9

剩余参数

plain
function 函数名(...参数){
    函数体
}
javascript
function add(...theNums) {
    let sum = 0;
    for (let num of theNums) {
        sum += num;
    }
    return sum;
}
console.log(add(3, 7, 9, 15,66));

二、作用域

函数是一个基本作用域

1.全局变量

函数外声明或函数内隐式声明的变量

2.局部变量

函数内用var声明的变量

3.块级变量

块级变量:let声明的变量,只在{}中有效

javascript
var str = '123' //全局变量
function test(){
    var str2 = '234' //局部变量
    for(let i = 0;i<3;i++){ //块级变量
        console.log(i)
    }
}

4.垃圾回收

函数执行后,销毁局部变量,可以使用全局变量保存和return返回来保存

匿名函数

没有名字的函数

箭头函数

函数名 = 参数 => 返回值

回调函数

方法功能
find()返回满足的第一个条件的元素
every()判断是否所有元素都满足条件
some()判断是否有元素满足条件
forEach()遍历数组
map()返回一个新数组,元素是原数组元素调用函数处理后的值
reduce()对数组元素进行计算,返回一个值
reduceRight()从右向左计算

函数嵌套

函数可以嵌套,嵌套的函数可以访问外层函数的变量,但是不能访问内层函数的变量

作用域链

函数执行时,会创建一个作用域链,作用域链中包含当前作用域,当前作用域的父作用域,直到全局作用域
找不到就返回上一层找,直到找到为止

闭包函数

  1. 函数外部访问函数内的变量
  2. 变量的值保存在内存中,不能被修改

什么是闭包

内部函数可以访问其所在外部函数中声明的参数与变量

什么是闭包函数

声明在函数内部的函数

应用场景

闭包案例

plain
function A(){