- 定义
闭包是在另一个函数(称为父函数)中定义的函数,并且可以访问在父函数作用域中声明和定义的变量。
闭包可以访问三个作用域中的变量
1、在自己作用域中声明的变量
2、在父函数中声明的变量
3、在全局作用域中声明的变量
var globalVar = "abc";
//自调用的函数
(function fatherFunction(fatPart){ //父函数fatherFunction作用域开始
var fatVar = 'F'; //在父函数中声明的变量
//自调用函数
(function childrenFunction(chiPart){ //子函数children作用域开始
var chiVar = 'C'; //在子函数中声明的变量
console.log(
"父函数参数:" + fatPart +
"父函数中声明:" + fatVar +
"子函数参数:" + chiPart +
"子函数声明:" + "chiVar" +
"全局声明:" + global;
)
})(5) //子函数作用域结束,将5作为参数
})(7) //父函数作用域结束,将7作为参数
//父函数参数:7
//父函数中声明:F
//子函数参数:5
//子函数中声明:C
//全局声明:abc
childrenFunction 是在 fatherFunction 中定义的闭包,可以访问在 fatherFunction 作用域内声明和定义的变量。此外,闭包还可以访问在全局命名空间中声明的变量。
- 应用
编写一个可以实现如下操作的函数
var biBao = F(6);
biBao(10); //返回16
biBao(20); //返回26
可以创建一个闭包来存放传递给函数 F 的值。被返回的内部函数是在外部函数中创建的,内部函数就成了一个闭包,它可以访问外部函数中的变量。本例中变量 (父函数作用域中的变量) 是 number
function F(number){
return function(a){
console.log(number + a);
}
}
var biBao = F(6);
biBao(10); //16
biBao(20); //26