<body>
<ul>
<li>link1</li>
<li>link2</li>
<li>link3</li>
<li>link4</li>
<li>link5</li>
<li>link6</li>
</ul>
</body>
<script>
// 闭包
// function fn(){
// var a = 10;
// a++;
// console.log(a)
// }
// fn();
// fn();
// fn();
// fn();
// function fn(){
// var a = 10;
// function fun(){
// a++;
// console.log(a)
// }
// return fun;
// }
// var f = fn();
// f();
// f();
// f();
// 闭包:利用作用域的嵌套,将原本的局部变量,进化成自由(私有)变量的环境
// 闭包的原理:
// 局部作用域,局部变量的生命周期,朝生暮死
// 利用作用域的嵌套,触发计算机的垃圾回收机制,将原本要删除的变量,暂时保存起来,可以继续使用
// 垃圾回收机制:将要删除的数据,先暂时存放在一个临时空间内,不立即删除,如果需要再次使用,可以直接找到该数据,继续使用,直到真正不用了,再被删除
// 闭包的应用:
// 循环中的异步
// var ali = document.querySelectorAll("li");
// for(var i=0;i<ali.length;i++){
// (function(index){
// ali[index].onclick = function(){
// console.log(index);
// }
// })(i)
// }
// for(var i=0;i<ali.length;i++){
// ali[i].onclick = (function(index){
// return function(){
// console.log(index);
// }
// })(i);
// }
// for(let i=0;i<ali.length;i++){
// ali[i].onclick = function(){
// console.log(i);
// }
// }
// 计时器的回调函数的传参
// setTimeout(fn("hahahah"),5000);
// function fn(str){
// return function(){
// console.log(str);
// }
// }
// 事件委托的封装
// 在外部重复操作函数内部的变量
// function fn(){
// var a = 10;
// return function(){
// console.log(a++)
// }
// }
// var f = fn();
// f();
// f();
// f();
// 闭包的特点:
// 可以将要删除的数据,保存起来,继续使用,方便
// 可以在函数外部操作内部的数据
// 因为要删除的数据,没有被删除,继续存起来,那么占内存,耗性能
// 在外部有可能改变内部的数据
// 闭包就是将作用域内部和外部连接起来的桥梁
</script>