1、執行自執行函數。某些函數可能只需要執行一次而且為了不造成全局污染。聲明變量需要使用var,否則會默認添加到全局對象的屬性上。或者別的函數可能會誤用該屬性。全局對象過於龐大的話,會影響訪問速度。(變量的取值需要從原型鏈上遍歷)
(function(value){
console.log(value)
})(3);
2、作為緩存.第二次使用對象時候,可以不用新建對象。單例模式的實現等等。
var Cache=(function(){
var cache={};
return{
getObj:function(name){
if(name in cache){
return cache[name];
}
var temp=new Object(name);
cache[name]=temp;
return temp;
}
}
})()
3、實現封裝過程。封裝對象中的變量不能直接訪問,提過提供的閉包來訪問。
var person=function(){
var name="no name!";
return {
getName:function(){
return this.name;
},
setName:function(value){
this.name=value;
}
}
}()
4、實現面向對象
總結:閉包就是別的函數中返回出來的函數,這個函數可以訪問返回該函數的函數中內部的變量!