09.JavaScript 預解析

一.預解析

1.1 引入問題

console.log(num);  // 結(jié)果是多少朝群?
console.log(num);  // 結(jié)果是多少儿子?
var num = 10;   互拾?
fn();
function fn() {
    console.log('打印');
}
fn();
var  fn = function() {
    console.log('想不到吧');
}

1.2 預解析

JavaScript 代碼是由瀏覽器中的 JavaScript 解析器來執(zhí)行的。JavaScript 解析器在運行 JavaScript 代碼的時候分為兩步:==預解析和代碼執(zhí)行钠绍。==

  • 預解析:在當前作用域下, JS 代碼執(zhí)行之前,==瀏覽器會默認把帶有 var 和 function 聲明的變量在內(nèi)存中進行提前聲明或者定義。==
  • 代碼執(zhí)行: ==從上到下執(zhí)行JS語句溯祸。==

預解析只會發(fā)生在通過 var 定義的變量和 function 上。學習預解析能夠讓我們知道為什么在變量聲明之前訪問變量的值是 undefined舞肆,為什么在函數(shù)聲明之前就可以調(diào)用函數(shù)焦辅。

二.變量預解析和函數(shù)預解析

2.1 變量預解析(變量提升)

預解析也叫做變量、函數(shù)提升椿胯。

變量提升: ==變量的聲明會被提升到當前作用域的最上面筷登,變量的賦值不會提升。==

  • 問題二:
//問題二:
//console.log(num); // 結(jié)果是多少哩盲?undefined
    //var num = 10; // 前方?

    //變量預解析后執(zhí)行過程
    var num;
    console.log(num); //undefined
    num = 10;
  • 問題四:函數(shù)表達式的聲明必須寫在函數(shù)調(diào)用之前
//問題四:
    func(); //Uncaught TypeError: func is not a function

    var func = function () {
      console.log(22);
    }

    //變量提升執(zhí)行過程
    var func;
    func();
    func = function () {
      console.log(22); //Uncaught TypeError: func is not a function
    }

2.2 函數(shù)預解析(函數(shù)提升)

函數(shù)提升:==函數(shù)的聲明會被提升到當前作用域的最上面,但是不會調(diào)用函數(shù)==

 //問題三:
    fn();

    function fn() {
      console.log(11); //11
    }

    //函數(shù)提升執(zhí)行過程
    function fn() {
      console.log(11); //11
    }
    fn();

三.預解析案例

3.1 案例一:

 // 案例1
    var num = 10;
    fun();

    function fun() {
      console.log(num);
      var num = 20;
    }

解析過程:先全局變量廉油,再局部變量

 //解析過程:先全局變量惠险,再局部變量
    var num;

    function fun() {
      var num;
      console.log(num); //undefined
      num = 20;
    }
    num = 10;
    func();

3.2 案例二

// 案例2
var num = 10;
function fn(){
    console.log(num);
    var num = 20;
    console.log(num);
} 
fn();

執(zhí)行過程:

//執(zhí)行過程
    var num;

    function fn() {
      var num;
      console.log(num); //undefined
      num = 20;
      console.log(num); //20
    }
    num = 10;
    fn();

3.3 案例三

 // 案例3
    /*  var a = 18;
     f1();

     function f1() {
       var b = 9;
       console.log(a);
       console.log(b);
       var a = '123';
     } */

解析過程:

 //解析過程
    var a;

    function f1() {
      var b;
      var a;
      b = 9;
      console.log(a); //undefined
      console.log(b); //9
      a = '123';
    }
    a = 18;
    f1();

3.4 案例四:前端面試題

    var num = 10;

    function fn() {
      console.log(num);
    }
    fn(); */
    // 案例4
    /*  f1();
     console.log(c);
     console.log(b);
     console.log(a);

     function f1() {
       var a = b = c = 9;
       console.log(a);
       console.log(b);
       console.log(c);
     } 

解析過程:

//執(zhí)行過程
    function f1() {
      /* 
      var a = b = c = 9;相當于
      var a=9;b=9;c=9;a為局部變量,而b,c是全局變量
      */
      //var a = b = c = 9;
      var a = 9;
      b = 9;
      c = 9;
      console.log(a); //9
      console.log(b); //9
      console.log(c); //9
    }
    f1();
    console.log(c); //9
    console.log(b); //9
    console.log(a); // Uncaught ReferenceError: a is not defined
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抒线,一起剝皮案震驚了整個濱河市班巩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘶炭,老刑警劉巖抱慌,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逊桦,死亡現(xiàn)場離奇詭異,居然都是意外死亡抑进,警方通過查閱死者的電腦和手機卫袒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來单匣,“玉大人夕凝,你說我怎么就攤上這事』С樱” “怎么了码秉?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸡号。 經(jīng)常有香客問我转砖,道長,這世上最難降的妖魔是什么鲸伴? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任府蔗,我火速辦了婚禮,結(jié)果婚禮上汞窗,老公的妹妹穿的比我還像新娘姓赤。我一直安慰自己,他們只是感情好仲吏,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布不铆。 她就那樣靜靜地躺著,像睡著了一般裹唆。 火紅的嫁衣襯著肌膚如雪誓斥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天许帐,我揣著相機與錄音劳坑,去河邊找鬼。 笑死成畦,一個胖子當著我的面吹牛距芬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播羡鸥,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蔑穴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惧浴?” 一聲冷哼從身側(cè)響起存和,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捐腿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纵朋,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年茄袖,在試婚紗的時候發(fā)現(xiàn)自己被綠了操软。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡宪祥,死狀恐怖聂薪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝗羊,我是刑警寧澤藏澳,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站耀找,受9級特大地震影響翔悠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜野芒,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一蓄愁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狞悲,春花似錦撮抓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乱投,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顷编,已是汗流浹背戚炫。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留媳纬,地道東北人双肤。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像钮惠,于是被迫代替她去往敵國和親茅糜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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