什么是闭包

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

闭包的形式

函数作为返回值

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

函数作为参数

function test(fn) {
  var a = 1
  fn()
}
var a = 2
function 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

TaoWu
15 声望2 粉丝