簡體   English   中英

setTimeout會保持函數不被垃圾回收嗎?

[英]Will a setTimeout keep a function from being garbage collected?

假設我有以下myFunctionsetTimeout二重奏

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM