亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

<optgroup id="cczp1"><ruby id="cczp1"><cite id="cczp1"></cite></ruby></optgroup>
  • <acronym id="cczp1"></acronym>
    <acronym id="cczp1"><option id="cczp1"><ol id="cczp1"></ol></option></acronym>
    <delect id="cczp1"></delect>
    <center id="cczp1"></center>
    <delect id="cczp1"></delect><em id="cczp1"><button id="cczp1"><blockquote id="cczp1"></blockquote></button></em>
    1. <optgroup id="cczp1"><td id="cczp1"><dfn id="cczp1"></dfn></td></optgroup>

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

      什么是變量提升

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

      變量提升的各種情況

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

      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}

      同名變量多次聲明

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

      // 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"

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

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

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

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

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

      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

      同一作用域不能存在相同標識符的變量或者函數(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關鍵字的在聲明方面類似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變量提升總結:https://juejin.cn/post/7050746117734023181

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

      相關推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        2022年9月25日

      聯(lián)系我們

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