淺談js閉包
阿新 • • 發佈:2017-11-01
訪問 itl js閉包 程序 學習內容 blank 學習 路線 對象
閉包是js學習中的一個重要知識點,那麽js閉包是什麽?
Js閉包就是一個函數。但是這個函數與js眾一般的函數又有一點不同,不同之處在於閉包能夠獲取其他函數體內的變量。這裏簡單回顧一下js中有關變量的學習內容:變量聲明、變量標識符和變量作用域 。下面一一解釋:
變量作用域 ::js中的變量作用域只有兩種:局部變量和全局變量;這兩者的區別是局部變量是在函數體內定義(js中只有函數能夠創建新作用域)、全局變量是不在函數內創建或
者不使用var關鍵字聲明的變量稱之為局部變量。
變量聲明 :: 變量聲明的兩種方式:var 變量名以及直接使用變量名。
變量標識符 ::變量標識符的組成由字母[a-zA-Z]、數字(0-9)、下劃線_ 、美元符號($)組成,其中字母不能開頭。
以上是我在學習一門語言中的變量知識點的學習路線和內容。下面是閉包函數的簡單例子:
1 function fn(){
2 var para = "閉包";
3 var getPara = function(){
4 console.log(para); };
5 return getPara;
};
6 //調用fn()方法後將會返回閉包函數(getPara())的引用,通過這個引用可以訪問局部變量para
7 var closure = fn();
8 //closure()執行輸出結果 閉包。
9 closure();
closure指向的是getPara函數,而getPara函數體內沒有聲明變量para,且變量para在函數fn()調用結束後理應會被銷毀,所以getPara函數(即closure)的輸出結果應該
是undefined,為什麽會是字符串“閉包”。這就是閉包的強大之處: 一般情況下,函數體內的局部變量在函數外是不能訪問到的,且函數調用結束後如果沒有指針指向該函數(即程序中沒有再次調用該函數)程序會銷毀變量,但是閉包可以讓變量在函數調用結束後不會馬上被銷毀。 那麽了解了閉包函數,可以在哪些場景中用到這個知識?運用到閉包知識的地方有:事件委托、列表頁。到這裏我相信可能會有人問事件委托和列表頁是什麽? 事件委托其實就是利用事件冒泡的原理,子元素中發生的事件在父元素中綁定,讓父元素幫忙代理(這裏需要了解js中的事件對象event),對事件委托還不太明白的可以看這篇博文:
http://www.cnblogs.com/liugang-vip/p/5616484.html
淺談js閉包