什么是闭包?
- 函数和其周围的词法环境的引用捆绑在一起会形成闭包
- 可以在另一个作用域里调用一个函数的内部函数并且可以访问该函数作用域中的私有成员
```javascript
function Fn(){
let name = “chj”;
return function(){
} } const fn = Fn() fn()console.log(name)
function once(fn){ const done = false; return function(){ if(!done){ done = true return fn.apaly(this, arguments) } } } const res = once((monet)=>{ console.log(monet) }) res(5)
闭包的本质?<br />函数在执行的时候会被放入到执行栈上,当执行完毕后就会从执行栈上移除;但是堆上的作用域成员因为被外部引用不能释放,因此内部函数依然可以访问该函数外部的成员<br />闭包的作用?
1. 闭包延长了函数作用域成员的使用范围
```javascript
// 闭包案例
function mathPower(power) {
return (count) => {
return Math.pow(count, power);
};
}
const m1 = mathPower(2)
const m2 = mathPower(3)
console.log(m1(4))
console.log(m1(5))
console.log(m2(6))
function priceCount(count) {
return (price)=>{
return price + count
}
}
const p1 = priceCount(1200)
const p2 = priceCount(2000)
const p3 = priceCount(2100)
console.log(p1(12000))
console.log(p2(14000))
console.log(p3(15000))