這個問題最近一直困擾著我,我感到自己無法理解Function對象的本質(zhì)是什么。如果說是一個普通的js變量。比如vara=5;我可以把它理解為開辟了某個內(nèi)存給變量a,并把內(nèi)容賦值為5。那么如果我定義了一個函數(shù):varfn=function(){console.log(this);};它在內(nèi)存中又是怎么存儲的?其實把我的問題再具體話一點,可以這樣問:1.Function對象中如何保存作用域鏈的上下文(context)2.Function對象的函數(shù)體是以字符串的形式存儲下來的嗎?再看看下面這個例子:varfn;(function(){vara=5;fn=function(){console.log(a++);};})();fn();這是個常見的閉包例子,就拿這個例子來說,F(xiàn)unction對象是如何把變量a保存在自己的上下文環(huán)境中的呢?首先感謝大家熱情的回答,我再補充說明一下:我主要的問題是Function在解釋器引擎(比如GoogleV8)里是以怎樣的形式實現(xiàn)的?是把函數(shù)體以字符串的形式存儲下來,并在執(zhí)行時以類似eval方法來調(diào)用它,或者還是其他方式?所以我的實際問題可能比較底層一點。
在javascript中,F(xiàn)unction對象的本質(zhì)是什么?
一只萌萌小番薯
2019-04-08 11:19:29