第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在javascript中,F(xiàn)unction對象的本質(zhì)是什么?

在javascript中,F(xiàn)unction對象的本質(zhì)是什么?

一只萌萌小番薯 2019-04-08 11:19:29
這個問題最近一直困擾著我,我感到自己無法理解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)用它,或者還是其他方式?所以我的實際問題可能比較底層一點。
查看完整描述

2 回答

?
繁花不似錦

TA貢獻(xiàn)1851條經(jīng)驗 獲得超4個贊

Javascript中變量可以存放兩種類型的值,一種為原始值(primitivevalue),如Undefined,Null,Boolean,Number,String。這類值存放在棧內(nèi)部,每賦值一次就創(chuàng)建一個新的拷貝。另一種為引用值(referencevalue),這類值存在堆內(nèi)存中,只能通過引用賦值。
舉例說明:
vara='test';//原始值
varb=function(){};//引用值
我們來測試下:
vara='test';//原始值
varb=function(){};//引用值
b.a='test';
functionchange(m,n){
m='change';
n.a='change';
}
change(a,b);
現(xiàn)在變量a仍然是test,但是變量b的屬性a的值則已經(jīng)為change,這也就是說前者相當(dāng)于是拷貝了一份值,而后者則是引用賦值。
而閉包問題我是這樣理解的,因為Javascript只有兩種作用域,一是全局作用域,二是函數(shù)作用域,它是沒有塊級作用域的。所以閉包的出現(xiàn)就相當(dāng)于利用一個匿名函數(shù)的殼模擬出一個塊級作用域。舉個更明顯的閉包例子:
for(vari=0;i<10;i++){
(function(e){
setTimeout(function(){
console.log(e);
},1000);
})(i);
}
聯(lián)系上面的知識,這里往匿名函數(shù)內(nèi)部傳的參數(shù)將會被拷貝一份,也就是說循環(huán)沒執(zhí)行一次就拷貝變量i的值到匿名函數(shù)內(nèi)部。
這里如果沒有閉包的話:
for(vari=0;i<10;i++){
setTimeout(function(){
console.log(i);
},1000);
}
由于變量i直接暴露在全局作用域內(nèi),當(dāng)調(diào)用console.log函數(shù)開始輸出時,這是循環(huán)已經(jīng)結(jié)束,所以會輸出10個10。
這是我對題主問題的理解,希望能對題主有幫助,可能還有不完善的地方,我打算寫篇博文好好總結(jié)下。:)
                            
查看完整回答
反對 回復(fù) 2019-04-08
  • 2 回答
  • 0 關(guān)注
  • 607 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號