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

闭包
// 函数在定义阶段会产生一个存储空间,并把存储空间的地址给函数名,在调用的时候会开辟一个执行空间(每次调用都不一样),在执行过后就会销毁
// 所以在函数内部的变量在外部拿不到(销毁了)
// 不让执行空间销毁 ===
// 每一个函数会有一个存储空间, 执行空间会在函数执行完毕后就销毁,但是存储空间(只有一个)不会
// 让一个执行空间不被销毁,返回引用类型即可,引用类型有引用空间,外面有变量接收了引用空间,我们执行空间不会销毁。
// 闭包就是能够读取其他函数内部变量的函数,或者把闭包理解成 "定义在一个函数内部的函数"
// 闭包形成的条件
// 1.需要一个不被销毁的执行空间
// 2.需要直接或者间接返回的返回一个函数(引用类型)
// 3.就是内部函数需要访问到外部函数的私有变量 //return出内部函数后,外部也能够获得外部函数的私有变量
// 4.这时可以把内部函数叫做外部函数的闭包函数
// 闭包的特点
// 1.作用域空间不销毁
// 优点: 因为不销毁,变量也不会销毁,增加了变量的生命周期
// 缺点: 因为不销毁,会一直占用内存,多了以后就会导致内存溢出(手动销毁设为null)
// 内存溢出:一块内存一直被占用而得不到释放,影响浏览器的垃圾会收机制。
// 2.可以利用闭包在一个函数外部访问函数内部的变量
// 优点: 可以在函数外部访问内部数据
// 缺点: 必须要时刻保持引用,导致函数执行栈不被销毁
// 3.保护私有变量
// 优点: 可以把一些变量放在函数里面,不会污染全局
// 缺点: 要利用闭包函数才能访问,不是很方便