函式的執行過程和閉包

2022-08-12 22:18:21 字數 842 閱讀 4392

函式的執行過程分為兩個階段

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.外層函式返回內層函式的...