乐趣区

关于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
退出移动版