1. 1、做数据的隐藏 -->不希望数据被外部所访问
  2. 2、做一个cache(缓存)-->小工具

什么是闭包

  1. 1、局部变量 2、返回值是函数 3、返回值函数中使用父级的变量
  2. 当不希望一个变量造成全局污染,又常驻内存,就使用闭包
  1. function go(){
  2. let a = 100
  3. return function(){
  4. console.log(a);
  5. }
  6. }
  7. var fn = go()
  8. 当函数调用完毕之后a的内存会马上释放
  9. // fn是全局变量,它没有调用a的内存就不会释放掉
  10. fn()

闭包的实例

  1. 使用一个闭包函数,可以设置和获取内存,但是没办法直接获取内存
  2. function createCache(){
  3. const data = {}//闭包中的数据是隐藏,不return外部没办法直接访问
  4. return {
  5. set:function(key,val){
  6. data[key] = val
  7. },
  8. get:function(key){
  9. return data[key]
  10. }
  11. }
  12. }
  13. var obj = createCache()
  14. obj.set("name","cheng")
  15. console.log(obj.get("name"));

闭包封装函数防抖

  1. <button id="btn">btn</button>
  2. <script>
  3. var btn = document.getElementById("btn")
  4. btn.addEventListener("click",debounce(function(){
  5. console.log(this.id);
  6. }))
  7. function debounce(fn,delay=500){
  8. let timer
  9. return function(){
  10. if(timer){
  11. clearTimeout(timer)
  12. }
  13. timer = setTimeout(()=>{
  14. fn.call(this)
  15. },delay)
  16. }
  17. }
  18. </script>