初面网初面网

闭包

是一个函数,外加该函数作用域的连接。闭包"关闭"了函数的自由变量。

function fun(){
    var a = 10;
    return function(){
        console.log(a);
    }
}
fun()()
  • 优点

内部函数可以访问外部函数的局部变量

  • 缺点

变量驻留,造成内存损耗

在ie浏览器中会造成内存泄漏

  • 用例
var lis = document.getElementsByTagName('li')
for(var i=0; i<lis.length;i++){
    (function(i){
        lis[i].onClick = function(){
            alert(i);
        }
    })(i)
}

// 如果不用闭包代码如下
/*
for(var i=0; i<lis.length;i++){
  lis[i].onClick = function(){
    alert(i);
  }
}

功能预想:有一堆li标签,当我点击哪个就把哪个的序号反馈

不用闭包时,当我们在页面上去点击,for循环已经完成遍历,所以不用闭包的情况下,i的长度会是lis.length
如果使用闭包,每一次循环都会创建一个闭包里的函数,每个函数的变量也都是新建的,也即是独立的,又由于闭包的特性,函数里的变量难以找到释放的时机,所以此时点击结果是正确的
*/

更新于 2025/2/26