JS-變量存儲(chǔ)
1.存儲(chǔ)(變量)
JS中變量是存在棧內(nèi)存中
JS中的內(nèi)存分兩種:棧內(nèi)存、堆內(nèi)存
棧內(nèi)存:存放變量
堆內(nèi)存:存代碼塊(object和function)
var fn=function()和function fn()這兩個(gè)定義函數(shù)是不一樣的
JS特殊在它是一個(gè)弱類(lèi)型語(yǔ)言
在定義變量的時(shí)候沒(méi)有明確的指明它的數(shù)據(jù)類(lèi)型,而是由后面賦的值決定它的類(lèi)型
var a="" var=12; var a=[];var a={}
java是強(qiáng)類(lèi)型語(yǔ)言
定義變量的時(shí)候就指明它的數(shù)據(jù)類(lèi)型,后面的賦值就不能隨便賦值了,必須和數(shù)據(jù)類(lèi)型保持一致
string a="12"; number a=12; boolean a=true;
JS內(nèi)存存放機(jī)制
1)基本數(shù)據(jù)類(lèi)型:string number boolean undefined null
如果變量后面的值是基本數(shù)據(jù),就直接存在棧內(nèi)存。棧里面要求變量不能重名,如果重名就會(huì)覆蓋前者
2)引用數(shù)據(jù)類(lèi)型:object array function
如果變量后面是引用數(shù)據(jù)類(lèi)型,將后面的代碼塊存在堆內(nèi)存中,然后將堆內(nèi)存中的內(nèi)存地址賦值給前面的變量
3)其他:Data Errey Math
備注:瀏覽器在執(zhí)行js代碼前,找出所有的關(guān)鍵字var和function將定義的變量存在內(nèi)存中,存放完畢之后按照自上向下的順序一步一步的執(zhí)行,當(dāng)使用某個(gè)變量的時(shí)候(console.log()),就會(huì)向內(nèi)存查找,有就使用,沒(méi)有就會(huì)報(bào)錯(cuò)(xxx is not defined),如果是賦值,就相當(dāng)于給window添加了一個(gè)屬性且賦值
2.銷(xiāo)毀內(nèi)存
瀏覽器自身每經(jīng)一段時(shí)間,自動(dòng)去檢測(cè)js中沒(méi)有用的內(nèi)存,把它銷(xiāo)毀掉
JS中的人為銷(xiāo)毀變量,給這個(gè)變量賦值為null a=null;null的本質(zhì)是空指針
內(nèi)存銷(xiāo)毀的順序是:先存后銷(xiāo)

浙公網(wǎng)安備 33010602011771號(hào)