為什么要學(xué)預(yù)解釋?
- 不知道應(yīng)該把函數(shù)或變量定義在哪里
- 不知道為何條件判斷中寫函數(shù)定義階段葫笼,會(huì)執(zhí)行錯(cuò)誤的結(jié)果
- 同一段函數(shù)深啤,在不同的場(chǎng)景下拗馒,結(jié)果不同
- 方便我們代碼調(diào)試
預(yù)解釋概念
- 在當(dāng)前作用域下路星,在JS代碼執(zhí)行前,瀏覽器會(huì)對(duì)帶var 和 function的诱桂,進(jìn)行聲明和定義
- 帶var 和 function的洋丐,聲明和定義不同
- 帶var: 只聲明,不定義 ->例: var n;
- 帶function: 聲明 + 定義 ->例:var fn = xxff00;
- 私有變量有 2 中
- 形參
- 函數(shù)中帶var的
函數(shù)分為定義和調(diào)用兩部
- 函數(shù)定義 3 步驟
- 開辟一個(gè)空間內(nèi)存
- 堆內(nèi)存
- JS代碼以字符串的形式存儲(chǔ)
- 對(duì)象以鍵值對(duì)的形式存儲(chǔ)
- 堆內(nèi)存
- 將函數(shù)體中的JS代碼挥等,作為字符串存儲(chǔ)在這個(gè)空間
- 把空間地址賦值給函數(shù)名
- 開辟一個(gè)空間內(nèi)存
- 函數(shù)調(diào)用 4 步驟
- 形成一個(gè)私有作用域
- 棧內(nèi)存
- 提過(guò)一個(gè)供JS代碼執(zhí)行的環(huán)境
- 棧內(nèi)存
- 形參賦值
- 預(yù)解釋
- 將內(nèi)存中的字符串友绝,作為JS代碼從上到下執(zhí)行
- 形成一個(gè)私有作用域
內(nèi)存包含:堆內(nèi)存和棧內(nèi)存
- 棧內(nèi)存
- 提供了一個(gè)供JS代碼執(zhí)行的環(huán)境
- 包含:全局作用域 和 私有作用域
- 堆內(nèi)存
- 用來(lái)存放引用數(shù)據(jù)類型的數(shù)據(jù)
- 函數(shù)數(shù)據(jù)類型:在堆內(nèi)存中以“字符串”的形式存儲(chǔ)
- 對(duì)象數(shù)據(jù)類型:在堆內(nèi)存中以鍵值對(duì)的形式存儲(chǔ)
- 用來(lái)存放引用數(shù)據(jù)類型的數(shù)據(jù)
作用域鏈
當(dāng)函數(shù)被調(diào)用的時(shí)候,會(huì)形成一個(gè)私有作用域肝劲,我們查看是否有私有變量n;
- 如果有迁客,說(shuō)明當(dāng)前函數(shù)中,所有的n都是私有變量
- 如果沒(méi)有辞槐,則往上一級(jí)查找掷漱,找不到,繼續(xù)找榄檬,一直找到window全局作用域還沒(méi)有的話卜范,報(bào)錯(cuò)!
預(yù)解釋無(wú)節(jié)操
1)只對(duì)等號(hào)左邊兒帶var的聲明鹿榜,但不定義
2)條件判斷語(yǔ)句海雪,無(wú)論是否成立,都會(huì)進(jìn)行預(yù)解釋
- 提示:永遠(yuǎn)不要在條件判斷語(yǔ)句中舱殿,寫函數(shù)定義階段奥裸,瀏覽器有兼容問(wèn)題;
3)自執(zhí)行函數(shù)不會(huì)進(jìn)行預(yù)解釋沪袭,只有執(zhí)行到他的時(shí)候刺彩,聲明+定義+調(diào)用 同步完成
4)已經(jīng)聲明過(guò)的,不會(huì)進(jìn)行重復(fù)聲明,但會(huì)重新賦值
5)return后面語(yǔ)句不會(huì)進(jìn)行預(yù)解釋创倔,return下面的語(yǔ)句雖然不執(zhí)行嗡害,但會(huì)進(jìn)行預(yù)解釋
函數(shù)的幾種寫法,寫法不同畦攘,導(dǎo)致預(yù)解釋就不同
- 函數(shù)常規(guī)寫法
function fn(){} // 按照f(shuō)unction進(jìn)行預(yù)解釋霸妹,聲明+定義
- 把函數(shù)賦值給變量
var fn = function(){} // 表達(dá)式的寫法:按照變量的規(guī)則,進(jìn)行預(yù)解釋
- 把函數(shù)作為值知押,賦值給 對(duì)象.屬性名
oDiv.onclick = function(){} //類似于 window.f = function(){}叹螟,不會(huì)進(jìn)行預(yù)解釋
- 自執(zhí)行函數(shù)
(function(){})() // 按照預(yù)解釋中之執(zhí)行函數(shù)的規(guī)定:不會(huì)進(jìn)行預(yù)解釋,執(zhí)行到的時(shí)候台盯,聲明+定義+調(diào)用 同步完成罢绽;