闭包
闭包就是能够读取其他函数内部变量的函数。
由于在Javascript 语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在
一个函数内部的的函数"。
它的最大用处有两个:
一个是前面提到的可以读取函数内部的变量
另一个就是让这些变量的值始终保持在内存中
以及还可以避免变量名冲突的问题
闭包的构成:
1、外部函数嵌套内部函数
2、内部函数使用外部函数环境
3、外部函数返回内部函数
<script type="text/javascript">
// 1、外部函数嵌套内部函数
function out() {
var msg = "Hello!";
// 2、内部函数使用外部函数的环境
function inside() {
console.log(msg);
}
// 3、外部函数返回内部函数
return inside;
}
// 先调用外部函数,得到内部函数
var out = out();
console.log(out);
//调用函数
out();
// 闭包
function out2(){
var num = 1;
function in2(){
num++;
console.log(num);
}
return in2;
}
var o = out2();
o();
o();
o();
o();
var o2 = out2();
/*
* 浇花
* 水壶 500ml水
* 每次浇水 50ml
* */
// 往水壶中加水
function initWater(water) {
// 给指定的花浇水
function waterFlower(flower) {
// 浇水,每次少50ml
water = water - 50;
if (water <= 0) {
// 自动加水
water = 100;
}
document.write("给"+flower+"浇水50ml,还剩"+water+"ml!<br>");
}
return waterFlower;
}
// 初始化水壶
var water = initWater(200);
// 开始浇水
water("梅花");
water("牡丹");
water("樱花");
water("樱花2");
water("樱花3");
</script>