function f1(){
var count =1;
function f2(){
console.log(count); // 1
}
}
子函数f2能向上读取变量count ,父函数f1不能获取f2的变量。
闭包:闭包就是能够读取其他函数内部变量的函数
- 闭包就是将内部嵌套函数变成外部可调用的
直接理解记忆成:
funaction outerFunction(){
var count = 0;
return function(){
count += 1;
}
}
var fun = outerFunction();
fun(); //1
fun(); //2
fun(); //3
outerFunction()被调用几次,即调用了内部函数的function()几次, 内部函数公用了counter,所以能够计数
闭包主要用途:
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
也可以写成这样
funaction outerFunction(){
var count = 0;
function innerFunction(){
count += 1;
}
return innerFunction; // return innerFunction是function ,return innerFunction() 是 number
}
var fun = outerFunction();
fun(); //1
fun(); //2
fun(); //3
封装成对象方法的写法:
var obj = new object();
obj.count=0;
obj.add =function(){
this.count ++;
}
function addFunction(){
obj.add(); //调用对象的add方法
console.log( "数量:"+ obj.count );
}