亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

通過(guò)示例演示理解javascript預(yù)解析

 更新時(shí)間:2022年03月14日 15:36:45   作者:館主阿牛  
這篇文章主要為大家介紹了通過(guò)示例演示理解javascript預(yù)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

面試官最愛(ài)考的javascript預(yù)解析,你搞明白了嗎?javascript的es5語(yǔ)法和其他語(yǔ)言還是有些區(qū)別的,預(yù)解析正是面試愛(ài)考的重點(diǎn),不妨來(lái)看看這篇博文…

提出問(wèn)題

先看下面的兩個(gè)最基本問(wèn)題,結(jié)果你想到了嗎?

坑一

<script>
    // 坑一
    console.log(num);
    var num = 10;
</script>

在這里插入圖片描述

結(jié)果為什么會(huì)是undefined呢?先保留這個(gè)疑問(wèn),后面解答,嘿嘿嘿~~~

坑二

下面這種函數(shù)定義方式,函數(shù)的調(diào)用在函數(shù)前后都可以

// 下面這種函數(shù)定義方式,函數(shù)的調(diào)用在函數(shù)前后都可以
        fn();
        function fn(){
            console.log(15);
        }
        //fn();

在這里插入圖片描述

那么我們?cè)倏纯磈avascript中的另一種函數(shù)定義(函數(shù)表達(dá)式)是否和上面的一樣呢?

// 下面這種函數(shù)定義方式,函數(shù)的調(diào)用只能在函數(shù)后面
        fun();
        var fun = function(){
            console.log(15);
        }
        // fun();

在這里插入圖片描述

這種函數(shù)定義,函數(shù)的調(diào)用放在函數(shù)前面為什么又會(huì)報(bào)錯(cuò)了呢,帶著疑問(wèn)我們看下面的解答。

問(wèn)題解答

要了解上面兩個(gè)坑的原因,我們就要知道javascript中的預(yù)解析。

1.我們 js 引擎運(yùn)行 js 分為兩步:預(yù)解析和代碼執(zhí)行。

  • (1).預(yù)解析 :js 引擎會(huì)把 js 里面所有的 var 還有 function 提升到當(dāng)前作用域的最前面
  • (2).代碼執(zhí)行:按照代碼書(shū)寫(xiě)的順序從上往下執(zhí)行。

2.預(yù)解析分為變量預(yù)解析(變量提升)和函數(shù)預(yù)解析(函數(shù)提升)。

  • (1).變量提升就是把所有的變量聲明提升到當(dāng)前的作用域最前面,不提升賦值操作。
  • (2).函數(shù)提升就是把所有的函數(shù)聲明提升到當(dāng)前作用于的最前面。

看了上述,是不是對(duì)于上面的疑惑解決了,還是懵懵懂懂嗎?下面我來(lái)復(fù)現(xiàn)一下你就明白了。

// // 坑一
        // console.log(num);
        // var num = 10;
        // 相當(dāng)于執(zhí)行了以下代碼
        var num; // 所有的 var 提升到當(dāng)前作用域的最前面,不提升賦值操作。
        console.log(num); //num此時(shí)未賦值,所以是undefined。
        num = 10;
// // 坑二
// 下面這種函數(shù)定義方式,函數(shù)的調(diào)用在函數(shù)前后都可以
        // fn();
        // function fn(){
        //     console.log(15);
        // }
        // 相當(dāng)于執(zhí)行下面代碼
        // 函數(shù)提升到當(dāng)前作用域的最前面
        function fn(){
            console.log(15);
        }
        fun();
// 下面這種函數(shù)定義方式,函數(shù)的調(diào)用只能在函數(shù)后面
        // fun();
        // var fun = function(){
        //     console.log(15);
        // }
        // 相當(dāng)于執(zhí)行了以下代碼
        var fun;   // 所有的 var 提升到當(dāng)前作用域的最前面,不提升賦值操作。
        fun(); // 此時(shí)壓根沒(méi)有fun()這個(gè)函數(shù),所以會(huì)報(bào)錯(cuò)
        fun = function(){
            console.log(15);
        }

現(xiàn)在是不是很清楚了。

案例練習(xí)

案例一

結(jié)果是幾?

 // 案例一
        var num=10;
        fun();
        function fun(){
            console.log(num);
            var num = 20;
        }
        // 相當(dāng)于執(zhí)行了以下代碼
        // var num;

        // function fun(){
        //     var num;
        //     console.log(num); //根據(jù)作用域鏈的就近原則,此時(shí)num未賦值,所以是undefined
        //     num = 20;
        // }
        // num = 10;
        // fun(); // 調(diào)用函數(shù)

在這里插入圖片描述

案例二

結(jié)果是幾?

// 案例二
        var num = 10;
        function fn(){
            console.log(num);
            var num = 20;
            console.log(num);
        }
        fn();
        // 相當(dāng)于執(zhí)行了以下代碼
        // var num;
        // function fn(){
        //     var num;
        //     console.log(num);   //根據(jù)作用域鏈就近原則,此時(shí)num未賦值,所以是undefined
        //     num = 20;
        //     console.log(num);  // 根據(jù)作用域鏈就近原則,num是20
        // }
        // num = 10;
        // fn(); // 調(diào)用函數(shù)

在這里插入圖片描述

案例三

結(jié)果是幾?

// 案例三
        var a = 18;
        f1();
        function f1(){
            var b = 9;
            console.log(a);  
            console.log(b);
            var a = '123';
        }
        // // 相當(dāng)于執(zhí)行了以下代碼
        // var a;
        // function f1() {
        //     var b;
        //     var a;
        //     b = 9;
        //     console.log(a);  //根據(jù)作用域鏈就近原則,此時(shí)a未賦值,所以是undefined
        //     console.log(b);  // 9
        //     a = '123';
        // }
        // a = 18;
        // f1();

在這里插入圖片描述

案例四(經(jīng)典的面試題)

結(jié)果是幾?

 // 案例四
        f1();
        console.log(c);
        console.log(b);
        console.log(a);
        function f1(){
            var a = b = c = 9;
            // 相當(dāng)于var a = 9; b = 9 ; c = 9 ; 在javascript中不用var申明直接賦值的變量是全局變量,所以b,c是全局變量
            // 區(qū)別于集體聲明 var a = 9,b = 9,c = 9; 等價(jià)于var a = 9,var b = 9,var c = 9;
            console.log(a);
            console.log(b);
            console.log(c);
        }
        // // 相當(dāng)于執(zhí)行了以下代碼
        // function f1(){
        //     var a;
        //     b = 9;
        //     c = 9;
        //     a = 9;
        //     console.log(a); // 9
        //     console.log(b); // 9
        //     console.log(c); // 9
        // }
        // f1();  // 函數(shù)調(diào)用
        // console.log(c);  // 9
        // console.log(b);  // 9
        // console.log(a);  // a是函數(shù)里的局部變量,所以函數(shù)外沒(méi)有申明的話會(huì)報(bào)錯(cuò)

在這里插入圖片描述

結(jié)語(yǔ)

看了這節(jié)內(nèi)容,你掌握javascript中的預(yù)解析了嗎,面試再也不怕啦!?。?/p>

相關(guān)文章

  • uniapp封裝小程序雷達(dá)圖組件的完整代碼

    uniapp封裝小程序雷達(dá)圖組件的完整代碼

    組件是一個(gè)單獨(dú)且可復(fù)用的功能模塊的封裝,每個(gè)組件,包括如下幾個(gè)部分:以組件名稱為標(biāo)記的開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽、組件內(nèi)容、組件屬性、組件屬性值,這篇文章主要給大家介紹了關(guān)于uniapp封裝小程序雷達(dá)圖組件的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 淺談JavaScript中面向?qū)ο蟮牡纳羁截惡蜏\拷貝

    淺談JavaScript中面向?qū)ο蟮牡纳羁截惡蜏\拷貝

    下面小編就為大家?guī)?lái)一篇淺談JavaScript中面向?qū)ο蟮牡纳羁截惡蜏\拷貝。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • JS正則表達(dá)式封裝與使用操作示例

    JS正則表達(dá)式封裝與使用操作示例

    這篇文章主要介紹了JS正則表達(dá)式封裝與使用操作,涉及javascript使用正則表達(dá)式針對(duì)郵箱、手機(jī)號(hào)、身份證、用戶名、中文等簡(jiǎn)單驗(yàn)證操作技巧,需要的朋友可以參考下
    2019-05-05
  • js 文本框里粘貼一個(gè)圖片url并顯示

    js 文本框里粘貼一個(gè)圖片url并顯示

    不錯(cuò)的應(yīng)用,一般用于開(kāi)發(fā)系統(tǒng)中,圖片新聞,直接顯示圖片
    2008-08-08
  • ES6擴(kuò)展運(yùn)算符和rest運(yùn)算符用法實(shí)例分析

    ES6擴(kuò)展運(yùn)算符和rest運(yùn)算符用法實(shí)例分析

    這篇文章主要介紹了ES6擴(kuò)展運(yùn)算符和rest運(yùn)算符用法,結(jié)合實(shí)例形式分析了ES6擴(kuò)展運(yùn)算符和rest運(yùn)算符基本功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • 微信小程序 扭蛋抽獎(jiǎng)機(jī)css3動(dòng)畫(huà)實(shí)現(xiàn)詳解

    微信小程序 扭蛋抽獎(jiǎng)機(jī)css3動(dòng)畫(huà)實(shí)現(xiàn)詳解

    這篇文章主要介紹了微信小程序 扭蛋抽獎(jiǎng)機(jī)css3動(dòng)畫(huà)實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 20個(gè)你不得不知道的js位運(yùn)算用法

    20個(gè)你不得不知道的js位運(yùn)算用法

    位運(yùn)算,那些看似晦澀但又蘊(yùn)含無(wú)限魔力的數(shù)字魔術(shù),在JavaScript開(kāi)發(fā)中扮演了默默無(wú)聞卻又至關(guān)重要的角色,本文介紹多個(gè)js位運(yùn)算的使用場(chǎng)景,闡述在JavaScript中,如何巧妙運(yùn)用位運(yùn)算實(shí)現(xiàn)效率的提升和算法的優(yōu)化,需要的朋友可以參考下
    2023-12-12
  • 詳細(xì)解密jsonp跨域請(qǐng)求

    詳細(xì)解密jsonp跨域請(qǐng)求

    當(dāng)進(jìn)行一些比較深入的前端編程的時(shí)候,不可避免地需要進(jìn)行跨域操作,JSONP跨域GET請(qǐng)求是一個(gè)常用的解決方案,下面我們來(lái)看一下JSONP跨域是如何實(shí)現(xiàn)的,并且探討下JSONP跨域的原理。
    2015-04-04
  • JS中使用FormData上傳文件、圖片的方法

    JS中使用FormData上傳文件、圖片的方法

    這篇文章主要介紹了JS中使用FormData上傳文件、圖片的方法的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • 通過(guò)函數(shù)作用域和塊級(jí)作用域看javascript的作用域鏈

    通過(guò)函數(shù)作用域和塊級(jí)作用域看javascript的作用域鏈

    這篇文章給大家分享了通過(guò)函數(shù)作用域和塊級(jí)作用域看javascript的作用域鏈的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友參考學(xué)習(xí)下。
    2018-08-08

最新評(píng)論