鍍金池/ 問答/Java  Python  HTML/ 函數(shù)是否應(yīng)該避免聲明在函數(shù)中?

函數(shù)是否應(yīng)該避免聲明在函數(shù)中?

一個函數(shù)執(zhí)行完成后其運行環(huán)境會被 GC 那么在其內(nèi)聲明的函數(shù)也會被 GC 掉吧(排除閉包情況)
那么下次再用時 嵌套函數(shù)會被重新聲明 這是不是種浪費
如果函數(shù)不常用到還好 被釋放掉還會節(jié)省內(nèi)存 常用這種操作會不會造成多余的性能開銷呢?~

回答
編輯回答
浪婳

不要想太多細節(jié)上的開銷,這也是新手常常犯的錯誤。先把大局上的架構(gòu)優(yōu)化弄明白才是正道

2017年4月1日 13:52
編輯回答
尋仙

其實呢,如果你寫過編譯器就知道了。

解析器在第一次解析的時候可以緩存解析結(jié)果(如果寫在外面就一直不能釋放解析結(jié)果),解析器可以選擇保存解析結(jié)果或是從重新解析。

JS里,一個函數(shù)其實算是一個對象,例如 {args:arglist,code:code,closure:closure} args 是形參列表,code 是函數(shù)體,closure 是執(zhí)行環(huán)境,是閉包。。。其他的東西就先省略了。。。這里面code是不變的,args是不變的,不用每次重新解析。 實現(xiàn)的時候可以固定這一部分的值,每次需要“函數(shù)對象”的時候,把函數(shù)對象的對應(yīng)屬性指向這些值,只是需要重置 closure 而已。

2017年8月20日 08:18
編輯回答
陪她鬧

其實題主心應(yīng)該更高一點,比如看到這個一下子讓我想起的 JavaScript Module,還不如好好關(guān)心一下它。

現(xiàn)代瀏覽器已經(jīng)足夠聰明來應(yīng)付你的疑慮!

2018年9月10日 21:49
編輯回答
情殺

在js中有一種函數(shù)聲明在函數(shù)中的方式叫閉包,有興趣了解可以了解阮老師的博客http://www.ruanyifeng.com/blo...

2018年8月21日 22:02
編輯回答
落殤

是的,在es6的塊級作用域中如果使用let 的方式提升聲明一個函數(shù)容易出問題,如下將會報錯:

{
    var fuc ;
    let fuc = function(){
    }
}
// Uncaught SyntaxError: Identifier 'fuc' has already been declared 

具體你可以看下 ES6 塊級作用域 http://es6.ruanyifeng.com/#do...

2018年4月28日 09:27
編輯回答
放開她

視情況而定 你想太多了

2018年2月13日 16:23
編輯回答
命多硬

問題在于GC不是你想的立馬會執(zhí)行,他要是立馬執(zhí)行你的擔憂就會成立,GC已經(jīng)考慮到這個問題了。他設(shè)定了一定條件,滿足了才會去GC的。所以執(zhí)行的東西會有緩存這很合理。

2018年3月9日 07:42