您的位置:首页 > Web前端 > JavaScript

JavaScript闭包

2020-04-06 07:19 1431 查看

什么是闭包

通俗的来说,利用函数的嵌套,实现将第一层函数中的局部变量,可以在第一层函数外部修改的过程,叫闭包。

闭包的形成环境

  1. 函数的嵌套。
  2. 内部函数使用外部函数中的变量。
  3. 将内部函数返回,在外部函数的外部,接收返回值,执行(相当于执行了内部函数)。

闭包的特点

  1. 解决掉所有的全局变量,节省内存空间。
  2. 可以在函数外部,修改函数内部的变量。
  3. 相对于局部变量来说,浪费了内存。

闭包的应用场景

  1. 循环中的事件,事件处理函数中使用了循环的每次的计数器
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的序列号,闭包并不是一种固定写法,而是一种场景,只要满足了三个条件,就是闭包。

  1. 给某些系统默认的回调函数,传参
// (给计时器的回调函数,传参)
function fn(a){
return function(){
console.log(a);
};
}
setTimeout(fn("world"), 1000);
  1. 处理掉全局变量,只要开启新文件,新功能,最好上手就是一个匿名函数,简易闭包
var f = (function(){
var a = "hello";
function fn(){
console.log(a + "world");
}
return fn;
})();
f();
  1. 事件委托,利用到了闭包
obox.onclick = eveEnt(achild,function(){})
function eveEnt(eleArr,cb){
return function(eve){
eleArr
cb
}
}

闭包的拓展,计算机的垃圾回收机制
硬盘的:存储空间,删除数据,先转到某个空间中(回收站),可以找回来,内存的:运行空间,删除数据,直接删除,找不回来。
闭包:就是利用作用域的嵌套,触发计算机的垃圾回收机制。

私有变量:函数内部的变量,在外部修改。
闭包:就是利用作用域的嵌套,将局部变量进化成私有变量的环境。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
lb_nizhanban 发布了3 篇原创文章 · 获赞 0 · 访问量 51 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: