在JS中,函數是一種數據類型,能夠將它賦值給變量,所以函數能夠這樣建立:閉包
1 var func=function(){ 2 alert("func"); 3 } 4 func();
既然函數是一種數據類型,那麼一樣能夠將函數做爲另外一個函數的返回值:函數
1 var func=function(data1){ 2 return function(data2){ 3 alert(data1+"這是一個內部匿名函數,被返回給變量func "+data2); 4 } 5 } 6 func(1)(2);
運行結果:「1這是一個內部匿名函數,被返回給變量func 2」spa
上面代碼中,func()()彷佛有些奇怪,其實還有另外一種形式:code
1 var func=(function(){ 2 return function(){ 3 alert("這是一個內部匿名函數,被返回給變量func"); 4 } 5 })(); 6 func();
運行結果:「這是一個內部匿名函數,被返回給變量func 2」 注:由於最外層的function是一個匿名函數且沒有賦值給其餘變量,所以沒法傳值調用。blog
結合這兩種狀況,會發現其實fun()()等價於(function(){return function(){alert ("這是一個內部匿名函數");}})()。ip
理解清楚這一點,對於JavaScript中的閉包的理解會有好處!io