什么是闭包?优缺点是什么?

闭包指的是有权访问另外一个函数作用域中变量的函数。优点: 1. 一个是可以读取外层函数内部的变量。2. 让这些变量始终保存在内存中,即闭包可以使它的诞生环境一直存在(延伸了变量的作用范围。)缺点: 容易造成内存泄漏。满足以下条件才是闭包:1有函数嵌套2内部函数引用外部作用域的变量3返回值是一个函数4创建一个对象函数,让其长期驻留

为什么需要使用闭包?因为全局变量容易污染环境,而局部变量又无法长期驻留内存,于是我们需要一种机制,既能长期保存变量又不会污染全局,这就是闭包。什么时候使用闭包?:当我们需要重复使用一个对象,又想保护这个对象不被其他代码污染的时候,就可以使用闭包。如何销毁闭包的内存空间?将外部接收函数的变量重新赋值为null即可。

// 写一个函数,每次调用,数字都要减1 ——— 全局变量,占用内存,任意函数(地方)都可以随便调用,会污染环境。 var a = 100; function fn() { a–; console.log(a); } fn() // 99 fn() // 98 fn() // 97 // ———–每次调用,结果都是99。每次函数一调用完就会销毁。每次调用,b都是100开始,存不住。 function fn2() { var b = 100; b–; console.log(b); } fn2() // 99 fn2() // 99 fn2() // 99 // ————闭包的写法 function fn3() { let c = 100; function fn4() { c–; console.log(c); } return fn4; } var fn5 = fn3(); fn5() // 99 fn5() // 98 fn5() // 97 fn5 = null;

发表评论