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

js闭包的理解
什么是闭包?
闭包(closure):是指函数与其周围的状态(lexical environment 词法环境)的组合。通俗的理解是一个内部函数引用了外部函数的变量,此时外部函数就形成了一个闭包。下面就是一个简单闭包的写法。
function box() {
var a = 1
return function () {
console.log(a);
return a
}
}
let resFn = box()
resFn()
闭包的写法
根据上面的简单案列,我们对闭包已经有了初步的认识。闭包的写法必须具有以下两点。
1.函数嵌套体。
2.内部函数可以访问外部函数的变量
闭包的原理
1.垃圾回收机制
垃圾回收机制就是浏览器内存回收机制的一种算法。垃圾回收机制就是不停歇地查找那些不在使用的局部变量,并释放掉它所指向的内存。最早使用的垃圾回收机制的算法是 ——引用计数器算法,因为这种算法存在缺点,容易造成内存泄漏。目前已经基本不使用了。目前使用的垃圾回收机制是——标记清除法:它标记能被全局所使用的变量。被标记的变量不会被清除。
作用域链
内部函数使用变量的时候会先在自身去查找,自身没有的话就去父级作用域去查找。
闭包的特点
1.闭包的优点
(1)局部变量常驻内存,像全局变量一样常驻内存,不会污染全局命名空间。
(2)产生私有变量(内部函数调用外部函数的变量,此时这个变量就会变成内部函数的私有变 量)
2.闭包的缺点
(1)使用不当的话容易造成内存泄露(解决办法就是我们在不使用的时候手动赋值为null)。
(2)内存占用比较大,浪费内存。
经典闭包
function fn() {
let a = 1
return function () {
a++
return a
}
}
let newFn = fn()
console.log(newFn());
console.log(newFn());
console.log(newFn());