JS闭包

248 阅读1分钟
function f1(){
 let  a = 1
  function f2(){
   a++
    return a
  }
  return f2
}

var func = f1()
func()

1.闭包概念

上面代码中,a变量与f2函数就组成了一个闭包。

2.闭包特点

(1)函数套函数 函数套函数与闭包无关,只是为了创造一个外部可以使用的局部变量,既隐藏变量(使用闭包的目的) (2)return f2 return f2与闭包无关,只是为了让外面访问到f2函数,这样才能使用这个闭包。 使用window.f2=f2 效果一样。

3.闭包作用

闭包常常用来间接访问一个变量,既隐藏变量。

function(){
  let  a = 100
  window.f1 = function(){
    a += 1
   }
  window.f2 = function(){
    a -= 1
   }
}

这样,其他的js文件就可以window.f1()和window.f2()来操作a。别人不能直接访问变量a,防止a被误操作。

4.闭包缺点

(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。

(2)在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。