什麼是匿名函數和閉包 ? 函數我們最常見的是 function fn(){},這樣的 申明 然後fn()調用這個函數 但是我們還有一種是表達式函數 var ss = function(){}這樣的 也可以叫匿名函數 然後指派給ss 其實這兩種函數最主要的差別是 第一種是fn()在任何位置都可以調用函數 但是第二種在申明var ss =function(){}前調用這個函數 就會報錯 因為找不到這個函數 其實第二種函數 很像我們申明一個變量一樣 var s = 100; 在此申明s之前 用alt(s);也是肯定會報錯 一樣的道理!這是表達式函數 但是我們最常見的匿名函數是這樣的格式:(function(){})(); 最後一個括号是指立即觸發這個函數 !當然在最後括号裡面可以傳參,那麼什麼是閉包 閉包個人了解 可以分為一個簡單的了解和複雜的函數了解!下面寫個函數如下:
var s = "部落客";
function a(){
var m = 44;
alert(s); //當然會彈出“部落客”;因為它是全局函數 在任何函數任何地方都可以通路,那麼我在a函數内在寫個函數
alert(k); //不能通路 因為k是b函數内的局部變量 那麼外部函數是不能通路其他函數内的局部變量的
function b(){
var k=123;
alert(s);//也可以通路
alert(m);//可以正常通路 因為b函數在a函數内 那麼相對于a函數來說 那麼m是b函數的全局變量;
}
b();
a();//在最外面調用這個函數
這上面是簡單的閉包;那麼是下面的複雜的了解javascript的閉包
<script>
//在ECMAScript中,在函數聲明處向函數外部看到的聲明的所有變量,在函數内部都能通路到它們的最終值!
function fnTest(arr) {
for (var i=0;i < arr.length;i++) {
arr[i]=function () {
alert(i+" | "+arr[i]);
};
}
}
var arr = [0,1,2,3,4,5];
fnTest(arr);
for (var i=0;i < arr.length;i++) {
arr[i]();//始終輸出6還有一個undefined
//因為函數退出後,i值為6,是以通路到的值隻有6
</script>
總之 閉包函數
閉包函數隻能通路變量的最終值!!!
本文轉自 塗根華 51CTO部落格,原文連結:http://blog.51cto.com/tugenhua/735856,如需轉載請自行聯系原作者