[英]Will a setTimeout keep a function from being garbage collected?
假設我有以下myFunction
和setTimeout
二重奏
function myFunction(){
var am_i_eaten = 'ffdfjdhsfhs';
setTimeout(function(){
console.log(am_i_eaten);
},3000);
}
myFunction();
setTimeout
保持myFunction
活動范圍(因為它仍然可以am_i_eaten
打印am_i_eaten
),並防止它在我的Node.JS環境中被垃圾收集? 我認為這種行為與瀏覽器中的行為有些不同?
謝謝!
你創建的是一個函數閉包,並且在setTimeout()
回調運行之前,該閉包中的變量不會被垃圾收集。
您可以在概念上將局部變量視為函數,將其作為垃圾收集的單個項目,只有當仍然無法調用的其他代碼可以訪問這些變量時。 因此,在運行setTimeout()
回調之后,變量am_i_eaten
仍然可以訪問,並且不會被垃圾回收。
這在瀏覽器和node.js中完全相同(在Chrome和node.js中它實際上是相同的V8 JS引擎)。
一旦超時操作完成,setTimeout將由垃圾收集器自動收集任意數據。
在javascript中,在創建函數時創建函數的范圍 。 SetTimeout
采用一個回調函數,該函數保留myFunction
范圍的引用。 因此,在調用回調函數之前,它不會被垃圾收集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.