定义在一个函数体内,且访问了外部函数变量 的函数,即 闭包函数(闭包)
优点:
1、延长函数内局部变量的生命周期
2、在函数外部可以操作到函数内部的私有变量【重点作用】
缺点:会导致内存泄露,所以要谨慎使用
应用场景:
1、将函数作为一个函数的返回值 如:封装API模块,只对外暴漏内部的功能函数,不暴漏外部函数的私有变量 --- 类似于类的权限修饰
2、将函数作为实参传递给一个函数内部的另一个函数调用 如:函数内调用定时器函数,将闭包函数作为定时器的回调函数传递
回调和闭包的区别:【是否定义在函数体内】
回调函数:作为实参传递的函数,没有定义在一个函数体内
闭包函数:定义在一个函数体内,且访问了外部函数变量 的函数
举例:
function handle(msg, time) {
setInterval(function callback() {
console.log(msg);
}, time)
}
handle("哈哈哈哈", 5000)
对于setInterval函数来说,callback函数是回调函数;
对于handle函数来说,callback函数是闭包函数;