千锋教育JavaScript全套视频教程(10天学会Js,前端javascrip

/* function test() {
var a = 0
return function(){
console.log(a);
}
}
test()() */
//闭包
// 闭包就是能访问到外部函数作用域中变量的函数
// 使用场景
// 当我们需要隐藏一些不希望被别人访问的内容时候就可以使用闭包
/*
产生闭包的条件
1.在函数内部也有一个函数
2.函数内部的函数里面用到了外部函数的局部变量
3.外部函数把内部函数作为返回值return出去了
*/
/*
闭包的生命周期:
1.闭包在外部函数调用时产生的,外部函数每次调用都会产生一个全新的闭包
2.在内部函数丢失时销毁(内部函数被垃圾回收了,闭包才会消失)
*/
//注意事项
//闭包主要用来隐藏一些不希望被外部访问的内容,这就意味着闭包就需要占用一定的内存空间
// 相比较于类来说,闭包比较浪费内存空间(类可以使用原型而闭包不能), 需要执行次数少时,使用闭包,需要大量创建使用类
/* function outer(){
let someVariable = "someValue"
return function (){
console.log(someVariable);
}
}
outer()() */
function outer2() {
let num = 0
return () => {
num++
console.log(num)
}
}
let fn1 = outer2() // 独立闭包
let fn2 = outer2() // 独立闭包
fn1 = null
fn2 = null