什么是闭包
- 函数和函数外部能拜访到的变量的总和
- 变量过了它的生命周期还能拜访到
闭包的模式
函数作为返回值
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