闭包:内层函数+外层函数的变量,能够访问记住其外部函数作用域中的变量,即使外部函数已经执行完毕,这是因为闭包函数捕获了外部函数的执行环境 弊端:可能导致内存泄漏 应用于: 1.数据私有化和封装:闭包可以用来创建私有变量 2.函数工厂:闭包可以用来生成定制的函数,比如记忆函数,柯里化函数 3.回调函数:闭包可以用来在回调函数中访问外部函数的变量 4.循环中的回调函数:在循环中使用闭包可以解决变量作用域的问题
1.简单写法
function outer ( ) {
let a = 10 ;
function fn ( ) {
console. log ( a) ;
}
fn ( )
}
outer ( )
2.常见的闭包形式,外部函数可以访问使用函数内部的变量
function outers ( ) {
let a = 10 ;
function fn ( ) {
console. log ( a) ;
}
return fn
}
const fun = outers ( )
fun ( )
3.数据私有化和封装
function createCounter ( ) {
let count = 0 ;
return {
increment : function ( ) {
count++
} ,
decrement : function ( ) {
count--
} ,
getCount : function ( ) {
return count
}
}
}
const myCounter = createCounter ( ) ;
myCounter. increment ( ) ;
myCounter. increment ( ) ;
console. log ( myCounter. getCount ( ) )
4.在循环中回调函数
for ( let i = 0 ; i < 5 ; i++ ) {
setTimeout ( function ( ) {
console. log ( i) ;
} , i * 1000 )
}