在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    JavaScript變量提升 了解JavaScript變量提升

    什么是變量提升

    變量提升(Hoisting)被認(rèn)為是, JavaScript中執(zhí)行上下文 工作方式的一種認(rèn)識(shí)。從概念的字面意義上說(shuō),“變量提升”意味著變量和函數(shù)聲明會(huì)在物理層面移動(dòng)到全局代碼或者代碼塊的最前面,但這么說(shuō)并不準(zhǔn)確,實(shí)際上變量和函數(shù)聲明在代碼里的位置是不會(huì)動(dòng)的,而是在編譯階段被放入內(nèi)存中。

    變量提升的各種情況

    正常變量使用,先聲明再使用

    bla = 2;var bla;console.log(bla);// 2//可以隱式地將以上代碼理解為var bla; // 變量聲明會(huì)提升到作用域頂部bal = 2; // 賦值會(huì)被保留在原位置console.log(bla);// 2

    建議始終在作用域頂部聲明變量(全局代碼的頂部和函數(shù)代碼的頂部),這可以清楚知道哪些變量是函數(shù)作用域(局部),哪些變量在作用域鏈上解決。

    在變量聲明之前使用

    function doSomething() { console.log(bar); // undefined var bar = 111; console.log(bar); // 111}//可以隱式地將以上代碼理解為function doSomething() { var bar; //聲明提升至代碼塊頂部 console.log(bar); // undefined bar = 111; console.log(bar); // 111}

    如果去除變量聲明

    function doSomething() { console.log(bar); // Uncaught ReferenceError: bar is not defined}

    同名變量多次聲明

    同名變量多次聲明,重復(fù)的聲明會(huì)被忽略,每次賦值都會(huì)執(zhí)行,調(diào)用時(shí),使用最近的一次賦值。

    // example 1var bar=9;console.log(bar);//9var bar;console.log(bar);//9// example 2var bar=9;console.log(bar);// 9 var bar=3;console.log(bar); // 3

    函數(shù)聲明提升

    JavaScript 中的函數(shù)聲明被提升到了函數(shù)定義。你可以在函數(shù)聲明之前使用該函數(shù):

    hoisted(); // logs "foo"function hoisted() { console.log('foo');}//可以理解為function hoisted() { console.log('foo');}hoisted(); // logs "foo"

    重復(fù)的函數(shù)聲明,后者會(huì)覆蓋前者。

    hoisted(); // logs "bar"function hoisted() { console.log('foo');}function hoisted() { console.log('bar');}

    注意:函數(shù)表達(dá)式不會(huì)被提升,如下:

    notHoisted(); // TypeError: notHoisted is not a functionvar notHoisted = function() { //函數(shù)表達(dá)式 console.log('bar');};

    變量提升也適用于其他數(shù)據(jù)類(lèi)型和變量。變量可以在聲明之前進(jìn)行初始化和使用。但是如果沒(méi)有初始化,就不能使用它們。

    JavaScript 只會(huì)提升聲明,不會(huì)提升其初始化。

    函數(shù)和變量相比,會(huì)被優(yōu)先提升。這意味著函數(shù)會(huì)被提升到更靠前的位置。

    let 與 const 對(duì)變量提升的影響

    塊作用域

    { let a='test';}console.log(a); // throw Error: Uncaught ReferenceError: a is not defined

    必須先聲明,再使用

    let a = 1;function test() { console.log(a); const a = 2;}test(); // throw Error: Uncaught ReferenceError: can't access lexical declaration 'a' before initialization

    同一作用域不能存在相同標(biāo)識(shí)符的變量或者函數(shù)

    // example 1function test(params) { let params = 1;}test(0);// throw Error: Uncaught SyntaxError: redeclaration of formal parameter params // example 2function func() { let test = 1; let test = 3;}func();// throw Error: Uncaught SyntaxError: redeclaration of let test // example 3function func() { let inner=2; function inner (){ console.log(111); }}func();// throw Error: Uncaught SyntaxError: redeclaration of let inner

    class關(guān)鍵字的在聲明方面類(lèi)似let和const

    // example 1{ class Test { }}var t1 = new Test();// throw Error: Uncaught ReferenceError: can't access lexical declaration 'Test' before initialization // example 2var t1=new Test();class Test{}// throw Error: Uncaught SyntaxError: redeclaration of let Test // example 3class Test{}var Test=1;// throw Error: Uncaught SyntaxError: redeclaration of class Test

    參考

    MDN:https://developer.mozilla.org/zh-CN/docs/Glossary/HoistingJavaScript變量提升總結(jié):https://juejin.cn/post/7050746117734023181

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    (0)
    用戶(hù)投稿
    上一篇 2022年6月28日 00:00
    下一篇 2022年6月28日 00:00

    相關(guān)推薦

    • Atomic 原子類(lèi)詳細(xì)介紹

      Atomic 翻譯成中文是原子的意思。在化學(xué)上,我們知道原子是構(gòu)成一般物質(zhì)的最小單位,在化學(xué)反應(yīng)中是不可分割的。在我們這里 Atomic 是指一個(gè)操作是不可中斷的。即使是在多個(gè)線(xiàn)程…

      2022年7月5日
    • 歐冠比賽對(duì)陣烏克蘭球隊(duì),土耳其主場(chǎng)球迷齊聲高呼“普京”

      (觀(guān)察者網(wǎng)訊)“啦——啦啦啦,弗拉基米爾·普京!” 當(dāng)?shù)貢r(shí)間7月27日,在土耳其伊斯坦布爾舉行的歐冠資格賽第二輪比賽中,土耳其球隊(duì)費(fèi)內(nèi)巴切對(duì)陣烏克蘭球隊(duì)迪納摩。主場(chǎng)球迷高呼俄羅斯總…

      2022年7月30日
    • 自己實(shí)現(xiàn)隨機(jī)數(shù)

      隨機(jī)數(shù)函數(shù)rand大家一定都使用得爐火純青了,但是如何你想自己實(shí)現(xiàn)一個(gè)rand函數(shù)該怎么辦呢?這篇文章讓我來(lái)簡(jiǎn)單介紹一下隨機(jī)數(shù)的常用生成方法 最近工作太忙,幾乎沒(méi)精力寫(xiě)文章,竟然有…

      2022年6月27日
    • java開(kāi)發(fā)環(huán)境搭建,JDK配置

      JDK下載 百度搜索JDK(主流jdk是7/8)選擇www.Oracle.com網(wǎng)址發(fā)布的鏈接,找到對(duì)應(yīng)jdk下載,點(diǎn)擊直接安裝即可(注意記住安裝路徑) 環(huán)境變量配置Java ho…

      2022年6月25日
    • 手寫(xiě) Promise

      基礎(chǔ)版本 我們先以觀(guān)察者模式作為基石來(lái)搭建一個(gè)基礎(chǔ)版本,實(shí)現(xiàn)的功能如下: 構(gòu)造函數(shù)接受一個(gè)函數(shù) exector 作為參數(shù),該函數(shù)的第一個(gè)參數(shù)是 resolve,作用是把 Promi…

      2022年6月17日
    • 初中數(shù)學(xué)不好怎么辦?

      數(shù)學(xué)的學(xué)習(xí),要說(shuō)難,應(yīng)該從來(lái)都不易。一般不會(huì)出現(xiàn),初二數(shù)學(xué)突然很難學(xué)的情況。 初二了,為什么會(huì)覺(jué)得數(shù)學(xué)難?因?yàn)橹暗臄?shù)學(xué)成績(jī)也不好,基礎(chǔ)沒(méi)有打好,到了初二了,就覺(jué)得更加吃力。當(dāng)然,…

      2022年4月19日
    • C|do while的作用域和應(yīng)用場(chǎng)景

      do while語(yǔ)句是一個(gè)循環(huán)構(gòu)造,其工作方式與while循環(huán)類(lèi)似,只是該語(yǔ)句總是至少執(zhí)行一次。執(zhí)行語(yǔ)句后,do while循環(huán)檢查條件。如果條件的計(jì)算結(jié)果為true,則執(zhí)行路徑跳…

      2022年6月13日
    • 艾思軟件:前端開(kāi)發(fā)規(guī)范文檔

      開(kāi)發(fā)規(guī)范(前端) 版本:v1.0 日期:2022-01-15 一:命名規(guī)范 命名統(tǒng)一使用英文單詞,要求簡(jiǎn)單,通俗易懂。 項(xiàng)目命名 使用小寫(xiě)字母,多單詞采用 “ – ” …

      2022年6月23日
    • 有什么專(zhuān)業(yè)的難度是被嚴(yán)重低估的?

      我覺(jué)得是數(shù)學(xué)。 對(duì)學(xué)霸學(xué)神來(lái)說(shuō),數(shù)學(xué)是很簡(jiǎn)單的,至少在被打擊之前是這么認(rèn)為的。 我身邊有兩個(gè)例子: A同學(xué):從小就是“別人家的孩子”,數(shù)學(xué)競(jìng)賽保送北大,自信滿(mǎn)滿(mǎn)地選了數(shù)學(xué)系,大二時(shí)…

      2022年8月19日
    • shell特殊字符總結(jié)

      #注釋 ;命令分隔符 ;;終止case條件 . “點(diǎn)”命令[句點(diǎn), 即.]. 等價(jià)于source命令 文件名前面視為隱藏文件 當(dāng)前路徑, ..上級(jí)目錄 正則…

      2022年8月7日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息