閉包的講解與簡單實用 重新理解

2022-08-13 23:06:20 字數 1740 閱讀 5085

//閉包的概念就是函式巢狀函式  內部函式可以呼叫外部函式的引數和變數 並且變數貯存在記憶體中 不會被垃圾**機制銷毀

//可以手動銷毀

//下面介紹閉包的介紹和簡單使用

//簡單寫法

function outer()

return inner;

}var num=outer();

alert(num());//1

alert(num());//2

alert(num());//3

num=null;//手動銷毀

//稍微複雜的寫法

var outer=(function()

})();

alert(outer());//1

alert(outer());//2

alert(outer());//3

//為什麼會產生閉包這種情況呢

//首先num被建立在外部函式內部 而且有內部函式對它的引用 所以當函式自執行以後

//num不會被銷毀 還是會在記憶體中

//以上說法不能很好理解閉包這個東西

//下面這些話才可以更好的理解

//就是return 返回的不僅僅是函式 還把函式的所能訪問的作用域鏈(從內到外一直到window)打包返回了

//所以你繼續呼叫還可以訪問的到

//總結一句話:函式的作用域取決於被定義時,而不是呼叫時

/

閉包的好處:

1.希望乙個變數長期駐紮在記憶體當中

2.避免全域性變數的汙染

3.私有成員的存在

//用法

1.模組化**

2.在迴圈中直接找到對應元素的索引

1. var test=(function()

function start()

return ;

})();

test.init();

test.start();

/*這樣的好處不言而喻

首先除了test以外的任何物件都訪問不到 init 和start 方法

體現了高內聚的特點

維護也好

還可以改成惰性的

*/2.

var getul=document.getelementbyid("test");

var allli=getui.children;

var len=allli.length;

for(var i=0;i

allli[i].onclick=function()

}//點選所有的都會是3

因為for迴圈完畢以後 allli的點選事件還沒有執行  當執行的時候 i已經變成3了 

所以當你觸發事件的時候 只會輸出3

解決方法 :閉包

for(var i=0;i

(function(n)

})(i);

}//當每次for迴圈的時候 都會自執行匿名函式  並且把當前索引值傳進去

當你觸發事件的時候  會訪問到你之前傳進來的引數n 也就是當時for迴圈的索引值

//下面這種寫法也可以

for(var i=0;i

allli[n].onclick=(function(n)

})(i);

}//同理 目的就是當每次迴圈的時候 把 i 儲存在事件函式所能訪問的最近的作用域中

就是乙個當時執行i的副本  儲存在作用域中 來用

對閉包的簡單理解

閉包是乙個特別抽象的概念,所以本文不會對概念進行解釋。直接寫例子 需要對賦值 程式的執行 返回值有一定的理解 當然本文只是個人對閉包的淺顯的理解,希望能夠對你有所幫助。function fun return funsub var fn fun 執行fun函式,並將funsub函式的位址賦值個fn。f...

python的閉包的簡單理解

閉包 在函式中可以 巢狀 定義另乙個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包 形成閉包的三個條件,缺一不可 def line a k,b def line x return k x b return line line1 line a 1,5 print line1 1 line...

閉包的應用與理解

普通函式能完成大功能編寫,匿名函式能完成小功能 編寫,而且當作實參非常方便 而閉包比函式方便,擁有函式 的功能 類似於匿名函式 還能有 所需要使用資料 而面向對像,例項物件賦值給引數,裡面的引數和方法都有,但應用中往往只要一部分,而不是全部,故閉包的優點就能體現出來,就是比物件導向更輕量,不會有多餘...