闭包(2)

闭包可以看作是一个类,通过暴露的方法(函数)可以访问内部的私有属性或变量
闭包就是一种语法糖,它以很自然的形式,把我们的目的和我们的目的所涉及的资源全给自动打包在一起,以某种自然、尽量不让人误解的方式让人来使用。

模拟类

1
2
3
4
5
6
7
8
9
10
function getName(){
var name = "小菜";
var fName = function(){
return name;
}
return fName;
}
//getName函数返回一个获取name的函数fName(获取类里的那么,通过fName方法)
var f = getName();
f(); //此时才去执行fName函数

资源打包

1
2
3
4
5
6
7
8
9
10
11
12
13
//闭包实现数组和
function closure_Sum(arr){
var sum = function(){
return arr.reduce(function(x,y){
return x + y;
});
}
return sum;
}
var f1 = closure_Sum([1,2,3,4]);
var f2 = closure_Sum([1,2,3,4,5]);
alert(f1()); //10
alert(f2()); //15

返回函数集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function closure_Count(){
var arry = [];
for(var i=1;i<=3;i++){
arry.push((function(n){
return function(){
return n * n;
}
})(i));
}
return arry;
}
var ret = closure_Count();
var f1 = ret[0];
var f2 = ret[1];
var f3 = ret[2];
console.log(f1());
console.log(f2());
console.log(f3());

匿名直接执行的方法:

1
(function(x,y){return x * y;})(5,6); //30