摘要:注意匿名函數自執行只是產生閉包的一種情況,閉包是現象或者情形,不實用匿名函數自執行也有很多情況產生閉包,所以而且根本就是兩回事兒,不能混淆。小測驗,你能看出下面的程序用了閉包嗎閉包在中使用。閉包無處不在,直接看的例子。
通過文你將學到:
概述1.閉包是怎么回事兒?
2.閉包的原理和在jquery中的應用
3.從一到面試題徹底理解閉包和垃圾回收機制
4.閉包在jquery中的應用
經常聽到閉包這個詞兒,或者匿名函數自執行,之類的。到底他們是一個東西嗎?
1.什么是閉包?? 我不想扣定義,直接上例子。
function parent(firstname){ return function(lastname){ console.log(firstname+"·屌·"+lastname); } } parent("尼古拉斯")("大彬哥");
看圖:
函數執行完以后會銷毀(這里我就不談堆棧操作了理解圖就行了),然后各種變量會垃圾回收,而這里parent函數確實銷毀了,但是firstName這個參數并沒有垃圾回收,釋放內存,依然在內存中能夠被return里面的函數使用,好像return里面的函數把 父函數的那個資源給關閉在了自己的函數里面一樣,這個函數銷毀資源被關閉到子函數中依然能夠使用的現象叫做閉包。
注意匿名函數自執行只是產生閉包的一種情況,閉包是現象或者情形,不實用匿名函數自執行也有很多情況產生閉包,所以而且根本就是兩回事兒,不能混淆。
類比,在window系統中,你子文件夾中有使用的文件父文件夾是沒法刪除的。
2.實際應用,情況很多,先來一道面試題。function fn{ var arr = []; for(var i = 0;i<3;i++){ arr.push(function(){ console.log(i); }); } return arr; } var arrFn = fn(); arrFn[0]();//3 arrFn[1]();//3 arrFn[2]();//3
與這個類似的一個題是循環里面用事件,事件里面的i有問題,如下。
for(var i = 0;i還有一到非常愛考的面試題,
for(var i = 0;i<3;i++){ setTimeout(function(){ alert(i); }); }我只分析一個,其它的大家就會分析了。注意表象上粗略的理解就是 函數執行一瞬間,并不會等定時器,但是這個說法并不對,因為第一個就說不通。好我給記大家進入內部深入分析下過程。
記住一句話,函數定義壓入arr的時候并沒有執行。
小測驗,你能看出下面的程序用了閉包嗎?
function show(){ var a = 12; setTimeout(function(){ console.log(a); },1000); }3.閉包在jquery中使用。
閉包無處不在,直接看jquery的例子。
$("#btn").click(function(){ var json = {}; ajax(url,function(data){ json =dada; }); });
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82595.html
摘要:大家想想怎么做什么是匿名函數自執行并如何在實際庫中應用匿名函數自執行,注意,注意,只有這個名字和沒有其它名字,比如封閉空間,這個是為了讓大家好理解自己造的詞語。 通過本節課你將學到: 1.什么是函數表達式和函數聲明 2.first-class function 3.引用和復制的區別 4.函數傳參是怎么回事兒 5.關于函數的this和arguments 6.什么是匿名函數自執行并如何在...
摘要:大彬哥版權所有翻錄必究尼古拉斯屌大彬哥群尼古拉斯屌大彬哥函數聲明函數表達式是不是簡單的讓人發指區別就一句話,函數聲明,可以在函數調用之后,因為有函數預解析。而函數表達式必須在調用之前。 通過前三課講解,大家應該能做到 1.手里有一份隨時能夠換工作自信的簡歷 2.知道了學習js的正確姿勢 3.理解了全局對象、全局上下文、知道有預解析同時做了至少50道面試題 4.能熟練的使用json構建...
摘要:忍者級別的函數操作對于什么是匿名函數,這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數是一個很重要且具有邏輯性的特性。通常,匿名函數的使用情況是創建一個供以后使用的函數。 JS 中的遞歸 遞歸, 遞歸基礎, 斐波那契數列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執行機制 本文的目的就是要保證你徹底弄懂javascript的執行機制,如果...
javascript -- 回調函數 在高級語言層出不窮的年代, 各個語言都號稱有著一切皆為對象的自豪說法, 而 js 作為一門腳本語言卻相對于java等傳統面向對象語言有很大的不同之處, 除了 js 詭異的繼承體系之外, 最令人著迷的一個特性就是回調函數, 當然也有很多人對他詬病, 筆者認為 回調函數 和 異步 是js語言特性的兩大最為突出的店, 當然正如所有優點需要滿足自我的需求, 這個世界...
閱讀 1067·2021-11-23 09:51
閱讀 2412·2021-09-29 09:34
閱讀 3150·2019-08-30 14:20
閱讀 1045·2019-08-29 14:14
閱讀 3182·2019-08-29 13:46
閱讀 1077·2019-08-26 13:54
閱讀 1634·2019-08-26 13:32
閱讀 1427·2019-08-26 12:23