什么是闭包
- 函数和函数内部能访问到的变量的总和
- 变量过了它的生命周期还能访问到
闭包的形式
函数作为返回值
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。