函式的執行過程分為兩個階段
1.函式定義階段
會開闢乙個儲存空間,把函式體內的**原封不動的放在這個空間內(不解解析變數),把儲存空間的位址給函式名
2.函式呼叫階段
會生成乙個執行空間(函式體內部有很多變數需要儲存),按照函式的位址名找到函式的儲存空間
進行形參賦值,與解析,將函式儲存空間中的**拿出執行(才解析變數),執行完畢後執行空間會銷毀(js的垃圾**機制)
3.如何讓函式的執行空間不被銷毀
一旦函式的內部返回了乙個引用資料型別的時候,並且在函式外部有變數接受的情況下
這個函式的執行空間就不會被銷毀了
**示例:function fn()
return obj
}const o = fn()
閉包是函式使用的一種方式,目的是讓外部可以訪問函式內部的變數,閉包就是利用了這個函式的執行空間不被銷毀的邏輯
1.閉包的概念
函式都有自己的作用域,並且外部無法訪問函式內部的變數
函式在呼叫的時候會生成乙個執行空間,儲存函式內部宣告的變數,執行空間在函式執行結束後會立即銷毀
當函式內部返回了乙個引用資料類的時候,並且在函式外部有變數接受的情況下,這個執行空間就不會被銷毀了
2.閉包常見的實現方式
兩層函式,外層函式返回內層函式,內層函式去操作外層函式宣告的變數
(1)封裝私有變數:
function fn()
window.onscroll = debounce(fn,30)
function ddbounce(fn,interval)else } }
記憶體洩漏 浪費記憶體(產生的值不會被垃圾**)
理解閉包和立即執行函式
理解閉包和立即執行函式 1.閉包 function count i 5 count 1 var c1 count 變數i在函式呼叫完一次就被銷毀 c1 1 c1 1 如何實現乙個簡單的計時器,採用閉包 function count2 var c2 count2 c2 1 c2 2 c2 3 var ...
js函式的自執行和閉包
有些人叫這個是自執行的匿名函式 即便它不是 因為它沒有呼叫自身,它只是立即執行而已。function 為函式表示式新增乙個標示名稱,可以方便debug 但一定命名了,這個函式就不再是匿名的了 function foo 建立乙個立即呼叫的匿名函式表示式 return乙個變數,其中這個變數裡包含你要暴露...
閉包的特點和判斷閉包的執行結果
全域性變數和區域性變數都有缺點,全域性變數容易造成全域性汙染,而區域性變數則無法共享,不能長久儲存,為了使變數既可以共享,長久儲存,又不會全域性汙染,可以使用閉包。閉包的三個特點是 1.定義外層函式,封裝被保護的區域性變數 2.定義內層函式,執行對外層函式區域性變數的操作 3.外層函式返回內層函式的...