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