// 闭包:Closure
// 1.什么是闭包:闭包是嵌套的内部函数
// 2.闭包如何产生的。当嵌套的内函数使用了父函数的变量或者函数时,就产生了闭包
// 3.闭包的产生条件: 1.嵌套的函数 2.嵌套函数使用了父函数的变量或者函数
```javascript
function fun1() {
var a='aaaa'
var b='bbb'
console.log(a)
function fun2(){ //执行内部函数定义时就会产生闭包(不用调用内部函数)
console.log(a)
}
return fun2
}
var f = fun1() //这里就产生了一个闭包
f()
f() //还是一个闭包
var f2 = fun1() //这里又产生了一个闭包,一共两个闭包
// 常见的闭包
// 1.将内部函数作为外部函数返回值返回
```javascript
function fc1(){
var a=1
function fc2(){
a++
alert(a)
}
return fc2
}
var b = fc1()
b() //2
b() //3
var c= fc1()
c() //2
//这里可以看出闭包的第一个作用:
// 1.在外部函数的内部变量在该函数执行完后,仍然在内存中存活(延长了内部变量的生命周期)
// 2.函数内部的变量可以在函数外部操作(读写)
// 常见的闭包
// 2.将函数的作为实参,传递给另外一个函数使用
function showDelay(msg,time){
setTimeout(function (){
alert(msg)
//这里是showDelay函数的内部函数,
//使用了外部函数的实参msg
},time)
}
showDelay('我是作为函数实参传递给内部函数的变量','1000')