內(nèi)存釋放:
棧內(nèi)存的形成和釋放:
全局作用域:
- 形成:當(dāng)瀏覽器加載完頁(yè)面的時(shí)候衬浑,全局作用域形成
- 銷(xiāo)毀:關(guān)閉頁(yè)面,關(guān)閉瀏覽器焊虏,關(guān)閉電腦...
私有作用域:
- 形成:當(dāng)函數(shù)被調(diào)用的時(shí)候沮翔,形成私有作用域;
- 銷(xiāo)毀:一般當(dāng)函數(shù)執(zhí)行完成的時(shí)候骚亿,私有作用域就釋放了已亥,但是特殊情況除外:
- 不釋放:如果函數(shù)中的東西,被外面的變量或其他(作為對(duì)象屬性)占用的時(shí)候来屠,就無(wú)法釋放
- 不立即釋放:最典型的就是當(dāng)函數(shù)執(zhí)行完成的時(shí)候陷猫,返回一個(gè)函數(shù)的定義階段,這個(gè)定義階段的妖,還要再被執(zhí)行一次绣檬;當(dāng)兩次都執(zhí)行完成的時(shí)候,私有作用域得到釋放嫂粟;
垃圾回收機(jī)制:
瀏覽器每隔一段事件娇未,都會(huì)回收沒(méi)用的內(nèi)存,所以星虹,當(dāng)我們不用那個(gè)地址的時(shí)候零抬,可以把占用這個(gè)地址的東西镊讼,指向空指針null;這樣,等瀏覽器空閑的時(shí)候平夜,就會(huì)把這個(gè)內(nèi)存進(jìn)行回收蝶棋;
帶var和不帶var的區(qū)別:
- 帶var的:1) 私有變量 2)會(huì)進(jìn)行預(yù)解釋
- 不帶var: 1) 如果是設(shè)置,找不到忽妒,window.a=xxx; 如果是獲取玩裙,找不到,報(bào)錯(cuò) xxx is not defined; 2)不會(huì)進(jìn)行預(yù)解釋段直;
上級(jí)作用域:
- 上級(jí)作用域跟函數(shù)在哪里調(diào)用無(wú)關(guān)吃溅,只跟函數(shù)對(duì)應(yīng)的堆內(nèi)存,在哪個(gè)空間下開(kāi)辟有關(guān)鸯檬;
預(yù)解釋無(wú)節(jié)操:
1)只對(duì)等號(hào)左邊帶var的聲明决侈,但不定義
2)條件判斷語(yǔ)句,無(wú)論是否成立喧务,都會(huì)進(jìn)行預(yù)解釋
- 提示我們:永遠(yuǎn)不要在條件判斷語(yǔ)句中赖歌,寫(xiě)函數(shù)的定義階段;瀏覽器有兼容問(wèn)題功茴;
3)自執(zhí)行函數(shù)不會(huì)進(jìn)行預(yù)解釋俏站,只有執(zhí)行到他的時(shí)候:聲明+定義+調(diào)用 同步完成
4)已經(jīng)聲明過(guò)的,不會(huì)進(jìn)行重復(fù)聲明
5)return后面語(yǔ)句不會(huì)進(jìn)行預(yù)解釋痊土,return下面的語(yǔ)句雖然不執(zhí)行肄扎,但會(huì)進(jìn)行預(yù)解釋
函數(shù)的幾種寫(xiě)法,寫(xiě)法不同赁酝,導(dǎo)致預(yù)解釋就不同
1犯祠、 函數(shù)常規(guī)寫(xiě)法
function fn(){....} //按照f(shuō)unction進(jìn)行預(yù)解釋; 聲明+定義 var fn=xxxx;
2酌呆、把函數(shù)賦值給變量衡载;
var fn=function(){} //表達(dá)式的寫(xiě)法;按照變量的規(guī)則隙袁,進(jìn)行預(yù)解釋痰娱; var fn; 只聲明,不定義
3菩收、把函數(shù)作為值賦值給 對(duì)象.屬性名梨睁;
oDiv.onClick=function(){}; //類(lèi)似于 window.f=function(){} 不會(huì)進(jìn)行預(yù)解釋
4、自執(zhí)行函數(shù)
(function(){})(); //按照預(yù)解釋中自執(zhí)行函數(shù)的規(guī)定娜饵; 不會(huì)進(jìn)行預(yù)解釋坡贺,執(zhí)行到的時(shí)候,聲明+定義+調(diào)用 同步完成;