关于javascript:JavaScript闭包

什么是闭包

  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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理