函數(shù)預(yù)解釋

1,js 分為兩種數(shù)據(jù)類(lèi)型:

  • 基本數(shù)據(jù)類(lèi)型:是按照值來(lái)操作的
number  string  boolean null undefined;
  • 引用數(shù)據(jù)類(lèi)型:是按照引用的地址來(lái)操作的
object:對(duì)象,數(shù)組,正則,時(shí)間
function

引用類(lèi)型:存儲(chǔ)的是數(shù)據(jù)在內(nèi)存中的地址,數(shù)據(jù)庫(kù)在內(nèi)存中單獨(dú)存儲(chǔ),就是引用類(lèi)型的數(shù)據(jù)

2,JS 預(yù)解釋 的內(nèi)存分類(lèi):

  • 棧內(nèi)存:用來(lái)提供一個(gè)JS代碼執(zhí)行的環(huán)境;->作用域(全局作用域,私有作用域)
  • 堆內(nèi)存:用來(lái)存儲(chǔ)引用數(shù)據(jù)類(lèi)型的值;->對(duì)象存儲(chǔ)的是屬性名和屬性值,函數(shù)存儲(chǔ)的是代碼字符串
    注:當(dāng)瀏覽器加載html頁(yè)面是,會(huì)先提供一個(gè)全局 js 代碼執(zhí)行的環(huán)境,棧內(nèi)存

3,全局作用域 與 私有作用域

全局作用域:當(dāng)瀏覽器提供全局js代碼執(zhí)行的環(huán)境
私有作用域:當(dāng)函數(shù)代碼執(zhí)行時(shí),會(huì)形成一個(gè)私有的作用域
所有的作用域 都是棧內(nèi)存

4,預(yù)解釋

1,在當(dāng)前的作用域中,js 代碼執(zhí)行前,瀏覽器會(huì)默認(rèn)把所有帶 var 和 function 進(jìn)行提前申明和定義

var  num = 12;
`申明`:var  num告訴瀏覽器在全局作用域中有一個(gè) mun 的變量;只是聲明了,但是沒(méi)有定義
`定義`:num=12給我們變量進(jìn)行賦值

2,預(yù)解釋執(zhí)行環(huán)境:只有在函數(shù)執(zhí)行時(shí)候才會(huì)進(jìn)行預(yù)解釋。

3,在預(yù)解釋時(shí)候執(zhí)行的操作

var :只是提前聲明
function:提前聲明+定義都會(huì)完成,函數(shù)中return后面的代碼雖然不執(zhí)行,但是要預(yù)解釋
* 自執(zhí)行函數(shù)在全局作用域下是不進(jìn)行預(yù)解釋的,執(zhí)行到此,聲明和定義都完成了 *

4,全局變量 與 私有變量
全局變量:在全局作用域下申明的變量
私有變量:在私有作用域下申明的變量與函數(shù)的形參

5,代碼執(zhí)行的步驟:

  • 有形參,先給形參賦值
  • 進(jìn)行私有作用域中的預(yù)解釋
  • 私有作用域中代碼從上到下執(zhí)行

6,全局變量,帶var 與不帶的區(qū)別

num=12;不進(jìn)行預(yù)解釋?zhuān)喈?dāng)于給window添加了一個(gè)num的屬性名,屬性值12
var num=12;進(jìn)行預(yù)解釋?zhuān)粌H給window添加了一個(gè)num的屬性名,屬性值12,也添加了一個(gè)全局變量

js 中出錯(cuò)不進(jìn)行特殊處理,出錯(cuò)代碼以下代碼不進(jìn)行執(zhí)行

5,作用域鏈

1,作用域鏈:遇到一個(gè)變量,現(xiàn)在私有作用域查找,查不到再到全局作用域下找,找不到一直向上級(jí)作用域查找,一直找到window為止;
2,閉包:函數(shù)形成一個(gè)新的私有的作用域保護(hù)里面的私有變量不受外部干擾(外部修改不了私有的,私有的也修改不了外部的)

6,如何查找上一級(jí)作用域

看函數(shù)在那個(gè)作用域下定義的,它的作用域就是誰(shuí)=>與函數(shù)在哪里執(zhí)行的沒(méi)有任何關(guān)系

7,釋放內(nèi)存與作用域銷(xiāo)毀

1,讓堆內(nèi)存銷(xiāo)毀/釋放:讓引用他的變量值賦值為 null ;
2,讓堆內(nèi)存銷(xiāo)毀/釋放:

全局作用域:只有當(dāng)頁(yè)面關(guān)閉時(shí),全局作用域才銷(xiāo)毀
私有作用域:當(dāng)私有作用域代碼執(zhí)行完了,私有作用域才會(huì)主動(dòng)進(jìn)行銷(xiāo)毀;當(dāng)私有作用域中的部分內(nèi)存被作用域以外東西占用,那么久不進(jìn)行銷(xiāo)毀

私有作用域不能被銷(xiāo)毀情況
1,函數(shù)執(zhí)行返回一個(gè)引用數(shù)據(jù)類(lèi)型值,并且在函數(shù)外部被一個(gè)變量接受,這種情況私有作用域不可以銷(xiāo)毀
2,在私有作用域中給 DOM 元素事件綁定方法,私有作用域不可進(jìn)行銷(xiāo)毀
`只有函數(shù)執(zhí)行時(shí),才會(huì)產(chǎn)生私有作用域`

8,預(yù)解釋是一種毫無(wú)節(jié)操的機(jī)制

1,in:‘num’ in window 判斷是否為window這個(gè)對(duì)象的一個(gè)屬性,是的話返回 true,不是的話返回 false,但是在判斷中,就已經(jīng)預(yù)解釋了,所以 'num' in window 判斷為 true

if(! ('num' in window) ){ //這里可以進(jìn)行判斷 window是都有這個(gè)屬性名
    var num=12;// 不是window 屬性,則給 num 賦值
    console.log( num )
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • js中的數(shù)據(jù)類(lèi)型 基本數(shù)據(jù)類(lèi)型stringnumberundefinednullBoolean 引用數(shù)據(jù)類(lèi)型對(duì)象{...
    uplyw閱讀 280評(píng)論 0 2
  • 什么是預(yù)解釋?zhuān)涸诋?dāng)前作用域下,在JS代碼執(zhí)行之前,瀏覽器會(huì)對(duì)帶var和帶function的進(jìn)行提前聲明或定義; 帶...
    劉曉洋閱讀 327評(píng)論 0 1
  • * 預(yù)解釋 * 什么是預(yù)解釋 * 關(guān)于預(yù)解釋: 帶var和帶function不同 * 函數(shù)執(zhí)行四階段 * 作用域鏈...
    web前端ling閱讀 391評(píng)論 0 0
  • 在開(kāi)始之前先寫(xiě)一下js中的數(shù)據(jù)類(lèi)型. 基本數(shù)據(jù)類(lèi)型 number, boolen ,string ,null, u...
    Rapheal閱讀 916評(píng)論 0 0
  • 久違的晴天,家長(zhǎng)會(huì)。 家長(zhǎng)大會(huì)開(kāi)好到教室時(shí),離放學(xué)已經(jīng)沒(méi)多少時(shí)間了。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,814評(píng)論 16 22

友情鏈接更多精彩內(nèi)容