error來源 |? urlify.cn/F7jQRn66套java從入門到精通實戰(zhàn)課程分享1.變量提升  在ES6之前,我們聲明一個變量需要用到var關(guān)鍵字,..." />
<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          JS變量提升和函數(shù)提升

          共 1206字,需瀏覽 3分鐘

           ·

          2020-10-10 23:33

          點擊上方藍色字體,選擇“標星公眾號”

          優(yōu)質(zhì)文章,第一時間送達

          ? 作者?|??newObject()=>error

          來源 |? urlify.cn/F7jQRn

          66套java從入門到精通實戰(zhàn)課程分享

          1.變量提升

            在ES6之前,我們聲明一個變量需要用到var關(guān)鍵字,用var來聲明的變量就存在變量提升的特性。

             

            上述代碼粗略來講解,在上述代碼中存在全局作用域和函數(shù)作用域,在兩個作用域中都聲明了變量a。在fn函數(shù)執(zhí)行console.log(a)的時候,先會在自身所處在的函數(shù)作用域中找到變量a,

          如果沒有找到,就會去全局作用域中找。

            在fn函數(shù)作用域中我們可以看到a變量聲明并賦值了,但是它處于console.log(a)語句的下方,按照正常的邏輯,它不應(yīng)該找到的是外層定義的a嗎?但是結(jié)果恰恰相反。

            代碼執(zhí)行流程:

              我們可以根據(jù)位置來把代碼分為全局代碼和函數(shù)(局部)代碼。在執(zhí)行全局代碼前,首先將window添加為全局執(zhí)行上下文,之后對全局數(shù)據(jù)做預(yù)處理工作:

               ?。?)找到var關(guān)鍵聲明的變量,賦值為undefined,且添加為window的屬性。=>變量提升

               ?。?)將function聲明的變量賦值fun(),添加為window屬性。=>函數(shù)提升

                (3)this =>賦值window

            在預(yù)處理結(jié)束后,開始執(zhí)行全局代碼。

            函數(shù)代碼執(zhí)行流程也和上述大同小異,這里涉及到執(zhí)行上下文,就不細講了,后續(xù)會補充。

            所以我們可以這樣理解這行代碼

            

          ?  最后的結(jié)果自然就是undefined。這就是js存在的變量提升?

          2.函數(shù)提升

            函數(shù)提升和變量提升的原理一樣,區(qū)別就是在于,函數(shù)提升已經(jīng)創(chuàng)建好了函數(shù)對象,而變量提升賦值為undefined,可以理解為變量聲明提升。

             ?

             

          3.拓展

            (1)var fn = function(){}和function fn(){}的區(qū)別:前者為變量提升,后者為函數(shù)提升。

              

              

          ?

          ?  如果是用變量提升來聲明函數(shù),如果在此前調(diào)用該函數(shù),此時的函數(shù)對象并沒有創(chuàng)建,變量fn2賦值為undefined,所以瀏覽器不能識別,把它當做函數(shù)來調(diào)用,所以最后報錯。

            (2)在js中,函數(shù)是第一公民

              被覆蓋的不是函數(shù)fn,而是var fn =3;

             

            結(jié)果:

            


          ??? ?



          感謝點贊支持下哈?

          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色 真人 2020年 | 亚洲+变态+欧美 | 久热国产在线 | 欧美三级黄色全部 | 少妇一级婬片50分钟 |