亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

關(guān)于 JS 一些特別的點(diǎn)

Coly / 3538人閱讀

摘要:變量提升所謂變量提升即所有聲明變量或聲明函數(shù)都會(huì)被提升到當(dāng)前函數(shù)的頂部。對(duì)于第一個(gè)中,她最終執(zhí)行的代碼實(shí)際上是這樣的所以最終打印出來(lái)的結(jié)果分別是和,這就是變量提升很簡(jiǎn)單,不是嗎但是你要保持警惕,因?yàn)樗S時(shí)會(huì)讓你吃大虧。

變量提升

所謂 變量提升 即所有聲明變量或聲明函數(shù)都會(huì)被提升到當(dāng)前函數(shù)的頂部。

    var a = 1;
    function log(){
        console.log(a);
        var a = 2;
        console.log(2);
    }
    log();
    var a;
    console.log(a);

大家可以猜測(cè)下上面打印到控制臺(tái)的消息會(huì)是什么?

    結(jié)果分別是 : undefine,2 和 1

那么我們?cè)倏纯聪旅孢@個(gè)代碼打印出來(lái)會(huì)是什么呢?

    var a = 1;
    function log(){
        console.log(a);
        a = 2;
        console.log(2);
    }

    log()
    結(jié)果分別是 : 1 和 2

結(jié)合一下我們對(duì)變量提升的定義,你也許已經(jīng)明白了。對(duì)于第一個(gè)Demo中,她最終執(zhí)行的代碼實(shí)際上是這樣的

    var a = 1;
    function log(){
        var a;
        console.log(a);
        a = 2;
        console.log(2);
    }

    log()

所以最終打印出來(lái)的結(jié)果分別是 undefine 和 __2__,這就是變量提升很簡(jiǎn)單,不是嗎?但是你要保持警惕,因?yàn)樗S時(shí)會(huì)讓你吃大虧。

函數(shù)的聲明方式
    var getName = function(){
        console.log("函數(shù)表達(dá)式");
    }

    function getName(){
        console.log("函數(shù)聲明");
    }

    getName();

還是請(qǐng)大家想想會(huì)打印出什么?

    公布結(jié)果 : 函數(shù)表達(dá)式 

這就是兩種不一樣的聲明方式帶來(lái)的結(jié)果,對(duì)于 函數(shù)聲明 JS會(huì)在優(yōu)先解析,確保所有調(diào)用這個(gè)方法的地方不會(huì)報(bào)錯(cuò),但是對(duì)于 函數(shù)表達(dá)式 只會(huì)在JS從上往下解析的時(shí)候才會(huì),正式解析,我們可以看下面代碼會(huì)打印出什么。

    console.log(getName); // undefine

    var getName = function(){
        console.log("函數(shù)表達(dá)式");
    }

    console.log(getName); // 會(huì)打印出getName的方法
作用域

JS是沒(méi)有塊級(jí)作用域的(ES5之前),但是有函數(shù)作用域,我們看下面這兩個(gè)Demo,看看兩者的區(qū)別

    function add(){
        a += 10;
        return a;
    }

    var a = 30;

    console.log(add(a)+a);
    function add(a){
        a += 10;
        return a;
    }

    var a = 30;

    console.log(add(a)+a);

這是一道很基礎(chǔ)的問(wèn)題,當(dāng)我們把兩個(gè)Demo 同時(shí)寫(xiě)出來(lái)的時(shí)候,我相信很多人是可以回答出正確答案的,下面公布答案。

    第一個(gè)Demo : 80
    第二個(gè)Demo : 70

為什么會(huì)得到這樣的結(jié)果呢?我們看第一個(gè)Demo 函數(shù)里面的 a 實(shí)際上直接操作window下面的,也就是全局環(huán)境。但是第二個(gè)Demo操作的確實(shí)函數(shù)自己的形參,也就是自己的作用域,它的改變不會(huì)影響到全局環(huán)境的a

JS中聲明類的方法有很多種,這里我就介紹最經(jīng)典的一種而已

    function Animal(){
        this.name = "";
        var food = "";

        var eat = function(){
            console.log("eat");
        }

        this.run = function(){
            console.log("run");
        }
    }

    Animal.prototype.name = "小明";
    Animal.prototype.food = "穿山甲"

    var animal = new Animal();

    console.log(animal); // 會(huì)打印出什么屬性?
    console.log(animal.name); // 結(jié)果會(huì)是什么?
    console.log(animal.food); // 那么這個(gè)呢?

首先這個(gè)涉及到了閉包的概念,關(guān)于這個(gè)問(wèn)題我在這里就不詳細(xì)說(shuō)了,給大家一個(gè)知乎鏈接,里面講的答案非常的簡(jiǎn)單明了,記得要全部看完,不要只關(guān)注高分項(xiàng) JavaScript 里的閉包是什么?應(yīng)用場(chǎng)景有哪些?,基本我要講的都在這里面了。

    至于 animal.name 為什么會(huì)是 "" ,而 animal.food 是穿山甲,其實(shí)很簡(jiǎn)單,對(duì)象對(duì)于prototype會(huì)是低優(yōu)先,先找本身存不存在name這個(gè)屬性,找不到就到prototype去找。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/81534.html

相關(guān)文章

  • 1.2.HTML的核心標(biāo)簽

    摘要:的核心標(biāo)簽頭標(biāo)簽序號(hào)標(biāo)簽標(biāo)簽解釋定義關(guān)于文檔的信息定義文檔標(biāo)題定義頁(yè)面上所有鏈接的默認(rèn)地址或默認(rèn)目標(biāo)定義文檔和外部資源的關(guān)系定義關(guān)于文檔的元數(shù)據(jù)定義客戶端腳本定義文檔的樣式信息使用定義一個(gè)的模板文件新建模板文件,將模板文件放在目錄下配置一下 HTML的核心標(biāo)簽 1.HTML頭標(biāo)簽 序號(hào) 標(biāo)簽 標(biāo)簽解釋1 定義關(guān)于文檔的信息2 定義文檔標(biāo)題3 ...

    caikeal 評(píng)論0 收藏0
  • 我的React之路--入門(mén)

    摘要:在構(gòu)造函數(shù)里面初始化的數(shù)據(jù),把數(shù)據(jù)放在頁(yè)面上,點(diǎn)擊時(shí)候調(diào)用方法改變中的數(shù)據(jù)。是中父組件向子組件通信的方式,下面是一個(gè)簡(jiǎn)單的例子使用組件我是顯示的數(shù)據(jù)我們定義組件時(shí)候在構(gòu)造函數(shù)中可以接收到參數(shù),并且要使用傳到的構(gòu)造方法中。 React的學(xué)習(xí)之路還要繼續(xù)走下去,最近一邊在做未完成的項(xiàng)目一邊學(xué)習(xí)React,項(xiàng)目是vue寫(xiě)的,后面還需要有一個(gè)后臺(tái)管理系統(tǒng)計(jì)劃使用react完成,寒假說(shuō)長(zhǎng)也不長(zhǎng),...

    qpwoeiru96 評(píng)論0 收藏0
  • 關(guān)于Html+css階段學(xué)習(xí)總結(jié)

    摘要:再之后,通過(guò)專業(yè)老師的指導(dǎo),開(kāi)始進(jìn)行前端知識(shí)的全面及系統(tǒng)性的學(xué)習(xí)。而這篇文章便是對(duì)這次學(xué)習(xí)的一次階段性總結(jié)。的學(xué)習(xí)并不是太難,也可以說(shuō)是很容易,但千里之行,這才剛剛開(kāi)始,熟練的掌握,還需要不斷的練習(xí)。 一、學(xué)習(xí)經(jīng)歷 進(jìn)入大學(xué)不久,就加入了社團(tuán),從而對(duì)前端有了一個(gè)初步的了解,之后也做過(guò)一些學(xué)校的官網(wǎng),積累了一些微小的經(jīng)驗(yàn)。 到了大二的時(shí)候,學(xué)校開(kāi)設(shè)了專門(mén)的html+css課程,從中也學(xué)到...

    CoXie 評(píng)論0 收藏0
  • 關(guān)于Html+css階段學(xué)習(xí)總結(jié)

    摘要:再之后,通過(guò)專業(yè)老師的指導(dǎo),開(kāi)始進(jìn)行前端知識(shí)的全面及系統(tǒng)性的學(xué)習(xí)。而這篇文章便是對(duì)這次學(xué)習(xí)的一次階段性總結(jié)。的學(xué)習(xí)并不是太難,也可以說(shuō)是很容易,但千里之行,這才剛剛開(kāi)始,熟練的掌握,還需要不斷的練習(xí)。 一、學(xué)習(xí)經(jīng)歷 進(jìn)入大學(xué)不久,就加入了社團(tuán),從而對(duì)前端有了一個(gè)初步的了解,之后也做過(guò)一些學(xué)校的官網(wǎng),積累了一些微小的經(jīng)驗(yàn)。 到了大二的時(shí)候,學(xué)校開(kāi)設(shè)了專門(mén)的html+css課程,從中也學(xué)到...

    Rindia 評(píng)論0 收藏0
  • JavaScript 中的隱式類型轉(zhuǎn)換

    摘要:雖然你可能很驚訝甚至可能懷疑是的但是這都是有語(yǔ)言自己的一個(gè)隱式類型轉(zhuǎn)換的套路。基本的隱式類型轉(zhuǎn)換基本類型的隱式轉(zhuǎn)換這個(gè)其實(shí)我們使用的最多例如結(jié)果返回的是而不是這就是類型的隱式轉(zhuǎn)換。 基本上所有的語(yǔ)言都有 隱式類型轉(zhuǎn)換 ,但是對(duì)于 弱類型語(yǔ)言(JS) 來(lái)說(shuō) ,隱式類型轉(zhuǎn)換會(huì)比 強(qiáng)類型語(yǔ)言(Java) 帶來(lái)更大的副作用,有些行為甚至是不可思議的。雖然你可能很驚訝 ,甚至可能懷疑是 JS 的...

    txgcwm 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<