欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

啥是闭包

程序员文章站 2022-07-14 12:44:36
...

啥是闭包?

js中有个立即函数,闭包就长这样

function sort(a,b) = {
return  a-b;
};
(function() = {
})();

闭包就是定义在函数里的函数,为了能够访问函数里的变量. 是在js没有块级作用域的情况下的一个解决方案.
为什么会有这样反人类的设计呢? 是因为var 定义的变量的作用域是函数级的作用域.
举个栗子
定义三个按钮 这里自己定义哈哈 每个按钮的点击事件弹出的i都是3

for(var i=0;i<btns.length;i++){
   btn[i].onclick = function (){
   alert(i);
   }
}

使用闭包后,弹出的i会根据点击的按钮的不同而不同 ,是因为闭包强行将i分成好多份,每执行一次循环都为i分配一个内存


//使用闭包
for(var i=0;i<btns.length;i++){
  (function(i){
   btn[i].onclick = function (){
   alert(i);
   }
  })(i);
}

es6中的let是块级作用域,每一个代码块里的i都是独立的

for(let i=0;i<btns.length;i++){
   btn[i].onclick = function (){
   alert(i);
   }
}