什么是闭包

  1. 函数和函数外部能拜访到的变量的总和
  2. 变量过了它的生命周期还能拜访到

闭包的模式

函数作为返回值

function test() {  var a = 1  return function() {    console.log('a ', a)  }}var fn = test()var a = 2fn() // 1

函数作为参数

function test(fn) {  var a = 1  fn()}var a = 2function fn() {  console.log('a ', a)}

闭包的利用

// 循环赋值问题// test 调用完结循环曾经完结function test() {  var arr = []  for(var i = 0; i < 5; i++) {    arr[i] = function() {      console.log(i)    }  }  return arr} var res = test()res[0]() // 5
// 解决// i 在每一次循环中通过立刻执行函数传入// function test() {  var arr = []  for(var i = 0; i < 5; i++) {    arr[i] = (function(j) {      return function() {        console.log(j)      }    })(i)  }  return arr} var res = test()res[0]() // 0