5.預(yù)解析慷暂、閉包

預(yù)解析

  • 可以理解為js解析引擎在逐行執(zhí)行代碼前餐禁,對一些特殊代碼的預(yù)先執(zhí)行。
  • 也可以認(rèn)識是在馬拉松之前的熱身運動。
  • 具體一點講,是js在逐行執(zhí)行代碼前,會對js腳本進行一個整體檢查背桐。
    • 1、檢測語法有沒有錯誤
    • 2畦娄、變量聲明提升:檢測到變量聲明那就率先進行聲明(實際上是開辟一個內(nèi)存空間弊仪,將來備用)
    • 3、函數(shù)聲明提升:檢測到函數(shù)聲明也率先進行聲明(實際上是開辟兩個內(nèi)存空間役听,一個是變量表窘,一個是函數(shù))
  • 預(yù)解析造成js一個特殊的象限,就是在變量聲明和函數(shù)聲明之前的代碼艾扮,可以訪問它們填物。
  • js預(yù)解析完畢之后击困,才會整體正式逐行執(zhí)行广凸,但是預(yù)解析過的變量聲明和函數(shù)聲明不會重復(fù)執(zhí)行谅海。
  • js預(yù)解析分為兩種,全局預(yù)解析(全局代碼執(zhí)行的時候會先預(yù)解析)與局部預(yù)解析(函數(shù)在調(diào)用的時候內(nèi)部的代碼會先預(yù)解析)

變量聲明

  • 使用通過var定義的變量侥袜,才屬于變量聲明
    • 例如:var a; 屬于變量聲明。
    • 例如:b = 10; 不屬于變量聲明浦旱。
  • var關(guān)鍵字可以通過逗號連續(xù)聲明多個變量
    • 例如:var a, b, c = 20, d = 30;
    • a,b,c,d全部屬于聲明九杂。
  • var關(guān)鍵字在聲明變量的時候代兵,可以給其賦值爷狈,如果賦值表達式中含有一些變量裳擎,這些變量不屬于變量聲明。
    • 例如:var a = b = 10;
    • 其中a屬于變量聲明羡微,b不屬于惶我。

函數(shù)的定義方式

  • 字面量
    • 函數(shù)聲明
      • function fn(){}
    • 函數(shù)表達式
      • var fn = function(){}
  • 構(gòu)造函數(shù)
    • new Function()

函數(shù)聲明

在js中,函數(shù)聲明式寫法比較單一绸贡,好區(qū)分。

  • 一定是以function關(guān)鍵字開頭定義的函數(shù)
  • 一定具有函數(shù)名
  • 函數(shù)聲明有兩種捧挺,1種是全局函數(shù)聲明尿瞭,1中是局部函數(shù)聲明
    • 函數(shù)聲明要么在全局,要么直接嵌套在另一個函數(shù)內(nèi)

函數(shù)表達式

在js中黑竞,函數(shù)表達式的編寫形式疏旨,多種多樣。
比如把函數(shù)當(dāng)作數(shù)據(jù)賦值給變量充石,或者把函數(shù)作為返回值return,或者當(dāng)做參數(shù)傳遞拉岁,或者運算符運算惰爬,或者自調(diào)函數(shù)。

  • 要么不是以function關(guān)鍵字開頭來定義的函數(shù)陵叽,要么該函數(shù)定義在了語句當(dāng)中
  • 函數(shù)名可有可無

預(yù)解析細(xì)節(jié)規(guī)則

  • 變量聲明重名 -- 后面的忽略,沒有必要定義重復(fù)的變量
  • 函數(shù)聲明重名 -- 保留后面的巩掺,因為函數(shù)體可能不一樣,后面的優(yōu)先與前面的
  • 變量與函數(shù)重名 -- 保留函數(shù)
  • 寫在代碼塊中的函數(shù)研儒,名字會被預(yù)解析独令,函數(shù)體不會
    • 最終造成的現(xiàn)象是,在該函數(shù)定義的訪問它冲呢,不會報錯招狸,得到一個undefined
console.log(fn)  // undefined
if(true) {
    function fn(){}
}
console.log(fn)  // 函數(shù)體
  • 函數(shù)表達式不會被預(yù)解析,但是函數(shù)表達式定義的函數(shù)執(zhí)行時裙戏,其內(nèi)部會對自己進行函數(shù)聲明。
    • 最終造成的現(xiàn)象是翰意,在該函數(shù)的外面無法通過其名稱找到它信柿,但是在內(nèi)部可以。
console.log(fn);  // 報錯
var a = function fn(){
    console.log(fn);  // 函數(shù)體进鸠,因為表達式定義的函數(shù)形病,會在自己內(nèi)部被聲明一次。
}
console.log(fn);  // 報錯

函數(shù)執(zhí)行時形參的賦值

  • 一個函數(shù)在執(zhí)行時漠吻,會優(yōu)先定義形參,然后賦值绍傲。
  • 預(yù)解析和逐行執(zhí)行都慢與形參。
(function(a) {
    console.log(a);  // 100
    var a = 200;
    console.log(a);  // 200
}(100));

閉包

  • 有權(quán)訪問非自身局部變量(非全局變量)的函數(shù)猎塞,稱為閉包杠纵。
  • 有權(quán)訪問自由變量(非全局變量)的函數(shù),稱為閉包比藻。

自由變量

  • 一個函數(shù)可以訪問的非自身內(nèi)部變量,稱為這個函數(shù)的自由變量韩容。

引用了自由變量的閉包特點

  • 會延長自由變量的生命周期唐瀑,只要閉包不死我就不死

閉包的應(yīng)用

  • 可以利用閉包的結(jié)構(gòu)去管理一些重要的變量,防止外界隨意對其修改
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末请梢,一起剝皮案震驚了整個濱河市力穗,隨后出現(xiàn)的幾起案子当窗,更是在濱河造成了極大的恐慌,老刑警劉巖崖面,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巫员,死亡現(xiàn)場離奇詭異,居然都是意外死亡简识,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門奢赂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颈走,“玉大人,你說我怎么就攤上這事袖瞻。” “怎么了聋迎?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵霉晕,是天一觀的道長。 經(jīng)常有香客問我拄轻,道長伟葫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任斧抱,我火速辦了婚禮渐溶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茎辐。我一直安慰自己,他們只是感情好废膘,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布慕蔚。 她就那樣靜靜地躺著,像睡著了一般灌闺。 火紅的嫁衣襯著肌膚如雪坏瞄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天蕉斜,我揣著相機與錄音,去河邊找鬼宅此。 笑死,一個胖子當(dāng)著我的面吹牛弱匪,可吹牛的內(nèi)容都是我干的璧亮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼帘饶,長吁一口氣:“原來是場噩夢啊……” “哼群扶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤馁菜,失蹤者是張志新(化名)和其女友劉穎铃岔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毁习,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡纺且,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了猜嘱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫁艇。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖论皆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情点晴,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布俊扭,位于F島的核電站坠陈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仇矾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刻盐。 院中可真熱鬧,春花似錦馒疹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腥刹。三九已至汉买,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛙粘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工葫男, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崔列,地道東北人旺遮。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓盈咳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸣剪。 傳聞我的和親對象是個殘疾皇子丈积,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容