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