1. 作用:使用闭包主要是为了设计私有的方法和变量。
  2. 优缺点:闭包的优点是可以避免全局变量的污染;缺点是闭包会常驻内存,增加内存的使用量,使用不当很容易
  3. 造成内存泄漏。
  4. 概念:在JavaScript中,函数即闭包,只有函数才会产生作用域。(函数被引用包围)
  5. 闭包有3个特性:
  6. 1)函数嵌套函数
  7. 2)在函数内部可以引用外部的参数和变量
  8. 3)参数和变量不会被垃圾回收机制回收
  1. <!-- 闭包:
  2. 1、数据的隐藏 --不希望数据被外部访问
  3. 2、做一个 cache 缓存 --小工具
  4. -->
  5. <!--
  6. 闭包:
  7. 1、局部变量 2、返回值是函数
  8. -->
  9. <script>
  10. function create(){
  11. let a = 100;
  12. console.log(a);
  13. }
  14. // 当函数调用完毕之后 a 的内存会马上释放
  15. </script>
  1. <!-- 闭包:
  2. 当不希望一个变量造成全局污染,又要常驻内存,可以使用闭包
  3. -->
  4. <script>
  5. function create(){
  6. let a = 100;
  7. return function(){
  8. console.log();
  9. }
  10. }
  11. var fn = create();
  12. fn();
  13. // fn是全局变量,它没有调用a的内存就不会被释放掉
  14. </script>

闭包函数

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

闭包封装函数防抖

  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 = null;
  9. return function(){
  10. if(timer){
  11. clearTimeout(timer);
  12. }
  13. timer = setTimeout(()=>{
  14. fn.apply(this)
  15. },delay)
  16. }
  17. }
  18. </script>