1、闭包函数
<script> /* 闭包 1、做数据的隐藏 -->不希望数据被外部所访问 2、做一个cache(缓存) -->小工具 */ /* 闭包:1、局部变量 2、返回值是函数 */ function create(){ let a = 100; console.log(a); } /* 当函数调用完毕之后a的内存会马上释放 */ create(); </script>
<script> /* 当不希望一个变量造成全局污染,又常驻内存就使用闭包,一旦使用就会释放 */ function create(){ let a=100; return function(){ console.log(a); } } var fn = create() fn() console.log(fn); /* fn是全局变量,它没有调用,a的内存就不会释放 */ </script>
<script> /* 使用一个闭包函数,可以设置和获取内存,但是不能直接获取内存 */ function createCache(){ const data = {} //闭包中的数据只要我没有return,外部没办法访问 return { set:function(key,val){ data[key] = val }, get:function(key){ return data[key] } } } var obj = createCache(); obj.set("name","cheng"); obj.set("age",12); console.log(obj.get("age")); </script>
2、闭包封装函数防抖
<body> <button id="btn">btn</button> <script> var btn = document.getElementById("btn"); btn.addEventListener("click",debounce(function(){ console.log(this.id); })) function debounce(fn,delay=500){ let timer = null; return function(){ if(timer){ clearTimeout(timer) } timer = setTimeout(()=>{ fn.call(this) },delay) } } </script></body>