什么是闭包
通俗的来说,利用函数的嵌套,实现将第一层函数中的局部变量,可以在第一层函数外部修改的过程,叫闭包。
闭包的形成环境
- 函数的嵌套。
- 内部函数使用外部函数中的变量。
- 将内部函数返回,在外部函数的外部,接收返回值,执行(相当于执行了内部函数)。
闭包的特点
- 解决掉所有的全局变量,节省内存空间。
- 可以在函数外部,修改函数内部的变量。
- 相对于局部变量来说,浪费了内存。
闭包的应用场景
- 循环中的事件,事件处理函数中使用了循环的每次的计数器
var ali = document.querySelectorAll(".list li");
for(var i=0;i<ali.length;i++){
(function(index){
ali[index].onclick = function(){
console.log(index);
}
})(i);
}
此处可以拿到对应li的序列号,闭包并不是一种固定写法,而是一种场景,只要满足了三个条件,就是闭包。
- 给某些系统默认的回调函数,传参
// (给计时器的回调函数,传参)
function fn(a){
return function(){
console.log(a);
};
}
setTimeout(fn("world"), 1000);
- 处理掉全局变量,只要开启新文件,新功能,最好上手就是一个匿名函数,简易闭包
var f = (function(){
var a = "hello";
function fn(){
console.log(a + "world");
}
return fn;
})();
f();
- 事件委托,利用到了闭包
obox.onclick = eveEnt(achild,function(){})
function eveEnt(eleArr,cb){
return function(eve){
eleArr
cb
}
}
闭包的拓展,计算机的垃圾回收机制
硬盘的:存储空间,删除数据,先转到某个空间中(回收站),可以找回来,内存的:运行空间,删除数据,直接删除,找不回来。
闭包:就是利用作用域的嵌套,触发计算机的垃圾回收机制。
私有变量:函数内部的变量,在外部修改。
闭包:就是利用作用域的嵌套,将局部变量进化成私有变量的环境。