[問題] js閉包的基礎觀念疑問

看板Ajax作者 (paulma)時間4年前 (2020/01/05 10:55), 編輯推噓2(201)
留言3則, 2人參與, 4年前最新討論串1/2 (看更多)
大家好,小弟剛接觸js不久,目前正在利用網路平台學習,課程正好教到閉包並解釋了基 本原理,講師舉了一個function例子,如下 function greet(word) { return function(name){ console.log(word+ ' '+name); } } var sayhi=greet('hi'); sayhi('paul'); 在講師的講解中說當程式執行到 var sayhi=greet('hi'); 時 此時js會建立一個execution context, 而word這個變數則會儲存在 function greet的execution context中 當function greet執行完畢,便會離開execution stack 而在一般狀況js會透過garbage collection清除變數內容,但在抽離當下變數還是儲存在 記憶體中,所以之後才能繼續使用到這個變數 但我聽完後有點疑問,目前我的理解是在function執行完畢當下,garbage collection會 執行清除變數內容,所以在function greet執行完,word的這個變數應該就跟著清除了, 但現在看起來並不是這麼一回事,所以想請問js的garbage collection是在什麼時候會執 行?還是是js在遇到閉包時會自動不執行garbage collection? 希望各位高手能夠解答小弟的疑惑 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.10.203.44 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1578192921.A.49E.html

01/05 13:36, 4年前 , 1F

01/05 13:36, 4年前 , 2F
ipt-closures-efficiently/index.html
01/05 13:36, 2F

01/09 15:47, 4年前 , 3F
因為還用得到 所以不清除
01/09 15:47, 3F
文章代碼(AID): #1U4L0PIU (Ajax)
文章代碼(AID): #1U4L0PIU (Ajax)