1、闭包函数

  1. <script>
  2. /* 闭包
  3. 1、做数据的隐藏 -->不希望数据被外部所访问
  4. 2、做一个cache(缓存) -->小工具
  5. */
  6. /* 闭包:1、局部变量 2、返回值是函数 */
  7. function create(){
  8. let a = 100;
  9. console.log(a);
  10. }
  11. /* 当函数调用完毕之后a的内存会马上释放 */
  12. create();
  13. </script>
  1. <script>
  2. /* 当不希望一个变量造成全局污染,又常驻内存就使用闭包,一旦使用就会释放 */
  3. function create(){
  4. let a=100;
  5. return function(){
  6. console.log(a);
  7. }
  8. }
  9. var fn = create()
  10. fn()
  11. console.log(fn);
  12. /* fn是全局变量,它没有调用,a的内存就不会释放 */
  13. </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","cheng");
  16. obj.set("age",12);
  17. console.log(obj.get("age"));
  18. </script>

2、闭包封装函数防抖

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