在线不卡日本ⅴ一区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ù)聲明會在物理層面移動到全局代碼或者代碼塊的最前面,但這么說并不準(zhǔn)確,實際上變量和函數(shù)聲明在代碼里的位置是不會動的,而是在編譯階段被放入內(nèi)存中。

    變量提升的各種情況

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

    bla = 2;var bla;console.log(bla);// 2//可以隱式地將以上代碼理解為var bla; // 變量聲明會提升到作用域頂部bal = 2; // 賦值會被保留在原位置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ù)的聲明會被忽略,每次賦值都會執(zhí)行,調(diào)用時,使用最近的一次賦值。

    // 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ù)聲明,后者會覆蓋前者。

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

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

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

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

    JavaScript 只會提升聲明,不會提升其初始化。

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

    let 與 const 對變量提升的影響

    塊作用域

    { 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ù)

    // 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)鍵字的在聲明方面類似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),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月28日 00:00
    下一篇 2022年6月28日 00:00

    相關(guān)推薦

    • 存儲過程語法(sql server存儲過程語法)

      今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

      2022年11月26日
    • 暴雪將在中國大陸暫停多數(shù)游戲服務(wù) 網(wǎng)易回應(yīng):將為玩家服務(wù)到最后一刻

      11月16日,暴雪娛樂宣布與網(wǎng)易協(xié)議將到期,將在中國大陸暫停多數(shù)游戲服務(wù)。 針對該消息,網(wǎng)易表示,網(wǎng)易一直在盡最大努力和動視暴雪公司談判,希望推進(jìn)續(xù)約。經(jīng)過長時間的談判,我們?nèi)匀粺o…

      2022年11月17日
    • 16個基本導(dǎo)數(shù)公式(arctanx的導(dǎo)數(shù)是什么)

      反三角函數(shù)的定義值及值域這里簡單總結(jié)了反三角函數(shù)的定義、其對應(yīng)的三角函數(shù)、其定義域、值域,其后利用反函數(shù)求導(dǎo)法則完成了所有反函數(shù)求導(dǎo)公式的推導(dǎo)證明。不難看出上述推導(dǎo)過程其實都并不復(fù)…

      2022年11月6日
    • 個人怎樣開通淘寶直播賣貨(怎樣開通淘寶店鋪)

      淘寶是很多人喜歡的購物軟件,不少人在上面買東西,大家還可以通過淘寶直播間買東西價格更加便宜,一些小伙伴也想去淘寶帶貨,那么個人怎樣開通淘寶直播賣貨?下面小編為大家?guī)韨€人開通淘寶直…

      2022年11月4日
    • 吉賽爾邦辰與布雷迪離婚 將共同撫養(yǎng)孩子 邦辰布雷迪情史回顧

      NFL傳奇四分衛(wèi)湯姆-布雷迪發(fā)布聲明,證實與名模妻子吉賽爾-邦辰離婚,布雷迪在聲明中表示與邦辰友好結(jié)束13年的婚姻關(guān)系,而邦辰也發(fā)布了離婚聲明,祝福湯姆-布雷迪未來一切順利。 布雷…

      2022年10月29日
    • excel表1和表2數(shù)據(jù)匹配(vlookup函數(shù)兩張表匹配)

      EXCEL中函數(shù)“VOLLKUP”是廣泛應(yīng)用的函數(shù),很多時候都會用到這個函數(shù),多個表之間可以快速匹配數(shù)據(jù)。 需求:要把表2里面的成本、倉位這兩列的值匹配到表1里面,用“VOLLKU…

      2022年10月26日
    • 零時科技 || DPC攻擊復(fù)現(xiàn)

      背景 北京時間2022年9月10日,DPC代幣合約遭到黑客攻擊,損失超73,614 BUSD, 零時科技安全團(tuán)隊及時對此安全事件進(jìn)行分析,詳情可移步至分析文章“零時科技 || DP…

      2022年10月18日
    • 海天如何破局?

      這個國慶好不熱鬧,關(guān)于海天的新聞鋪天蓋地,絕大部分都是負(fù)面的新聞,我在想,這么大的企業(yè)有沒有智囊團(tuán),面對危機(jī)的處理辦法究竟有沒有?還是大家都在過節(jié),心思沒有放在解決困局上面。 很顯…

      2022年10月6日
    • 劉強(qiáng)東最終賠女方多少錢?個人簡歷顯示劉靜堯父親是劉毅嗎

      北美時間10月1日晚間,劉強(qiáng)東、劉靜堯雙方律師團(tuán)隊發(fā)表聯(lián)合聲明,聲明顯示案件雙方已經(jīng)達(dá)成和解,為這次事件畫上句號。不少人好奇,劉強(qiáng)東最終賠女方多少錢?劉靜堯父親是劉毅嗎?下面,一起…

      2022年10月2日
    • Python筆記-最小公倍數(shù)代碼實例(3.9版本)

      #頭條創(chuàng)作挑戰(zhàn)賽# 從Python3.9版本,Math模塊新增加了計算最小公倍數(shù)的函數(shù)lcm函數(shù)。本文簡單介紹此函數(shù)的應(yīng)用。 封面 2個整數(shù)的最小公倍數(shù) 在3.9版本中,通過lcm…

      2022年9月25日

    聯(lián)系我們

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