千鋒教育JavaScript全套視頻教程(10天學(xué)會(huì)Js,前端javascrip

/* function test() {
? ? ? ? var a = 0
? ? ? ? return function(){
? ? ? ? ? ? console.log(a);
? ? ? ? }
? ? }
? ? test()() */
? ? //閉包
? ? // ?閉包就是能訪問到外部函數(shù)作用域中變量的函數(shù)
? ? // 使用場(chǎng)景
? ? // ? 當(dāng)我們需要隱藏一些不希望被別人訪問的內(nèi)容時(shí)候就可以使用閉包
? ? /*
? ? ? 產(chǎn)生閉包的條件
? ? ? 1.在函數(shù)內(nèi)部也有一個(gè)函數(shù)
? ? ? 2.函數(shù)內(nèi)部的函數(shù)里面用到了外部函數(shù)的局部變量
? ? ? 3.外部函數(shù)把內(nèi)部函數(shù)作為返回值return出去了
? ? */
? ? /*
? ? ? ?閉包的生命周期:
? ? ? ? ? ?1.閉包在外部函數(shù)調(diào)用時(shí)產(chǎn)生的,外部函數(shù)每次調(diào)用都會(huì)產(chǎn)生一個(gè)全新的閉包
? ? ? ? ? ?2.在內(nèi)部函數(shù)丟失時(shí)銷毀(內(nèi)部函數(shù)被垃圾回收了,閉包才會(huì)消失)
? ? */
? ? //注意事項(xiàng)
? ? ? //閉包主要用來隱藏一些不希望被外部訪問的內(nèi)容,這就意味著閉包就需要占用一定的內(nèi)存空間
? ? ? // 相比較于類來說,閉包比較浪費(fèi)內(nèi)存空間(類可以使用原型而閉包不能), 需要執(zhí)行次數(shù)少時(shí),使用閉包,需要大量創(chuàng)建使用類
? ? /* ?function outer(){
? ? ? ? ?let someVariable = "someValue"
? ? ? ? ?return function (){
? ? ? ? ? ? ?console.log(someVariable);
? ? ? ? ?}
? ? ?}
? ? ?outer()() */
? ? function outer2() {
? ? ? ? let num = 0
? ? ? ? return () => {
? ? ? ? ? ? num++
? ? ? ? ? ? console.log(num)
? ? ? ? }
? ? }
? ? let fn1 = outer2() ?// 獨(dú)立閉包
? ? let fn2 = outer2() ?// 獨(dú)立閉包
? ? fn1 = null
? ? fn2 = null