(1) 闭包的概念:
闭包是指能够访问另一个函数作用域中的变量的函数。(概念有很多,我觉得这个比较容易理解)
(2) 闭包的形成原因:
内部的函数存在外部作用域的引用就会导致闭包
(3) 闭包的作用:
- 保护函数的私有变量不受外部的干扰。形成不销毁的栈内存。
- 把一些函数内的值保存下来。闭包可以实现方法和属性的私有化
(4) 闭包的应用
1. 返回一个函数
var a = 10
function demo(){
var a =20
function fn() {
a++;
console.log(a)
}
return fn
}
var b = demo()
b() // 21
上面代码中返回的fn()就是一个闭包。
2.把函数作为参数使用
var a = 'bee'
function f1() {
var a = 'pdd'
function f2() {
console.log(a)
}
return f2
}
function f(b) {
var a = 'app'
b()
}
f(f1()) //pdd
f(f1()) 执行的参数就是函数 f2
3.循环赋值
for (var i = 1; i < 10; i++) {
(function (j) {
setTimeout(function () {
console.log(j)
}, 500)
})(i)
}
因为闭包的存在,所以上面的程序可以依次输出1~9
(5) 总结
凡事都有利有弊,闭包确实很实用,但过多的使用闭包会占用大量内存,有内存泄漏的风险,所以编写程序过程中要酌情使用哦!