var和let區別簡述


 

   因為習慣用var聲明變量,以至於ES6出了let來替代var,我依然繼續用var,直到后來慢慢了解let之后,開始嘗試使用

 

    不同點:

      ①:var屬於ES5規范,let屬於ES6規范

     ②:var有預處理機制,let沒有。預處理機制也就是常說的聲明提前

      聲明提前:不管變量被聲明在函數什么位置,所有變量聲明都會被提升至函數頂部(變量聲明指 var a; 即聲明還未賦值)

           比如聲明變量a並賦值為1,即 var a = 1;  則 var a;會被提升至函數頂部 (只是a被提前,a的值1不會被提前)

      注:1. 在聲明變量時一定要初始化 ,初始化指 var a = 1; (聲明並賦值 

        2. 即使在函數內部,聲明變量時一定要加上var,不要只寫 a = 1; 否則變量a會自動升為全局變量

    

  下面立即函數執行后,控制台不會打印出1,而是undefined,因為只有聲明被提前,值沒有

  <script>
        (function() {
            console.log(a);
            var a = 1;
        })()
    </script>

   下面立即執行函數執行后,控制台不會打印出1undefined,而是報錯,因為let聲明的變量不會被提前

  <script>
        (function() {
            console.log(a);
            let a = 1;
        })()
    </script>

  

 

    ③:作用域的不同,var是全局作用域,let是塊級作用域

    下面代碼控制台會打印出1 

  <script>    
        if(true) {
            var a = 1;
        }
        console.log(a);
    </script>

    下面代碼控制台不會打印出1,會報錯,提示a沒有定義(let定義的變量只在{}里才能訪問到)

  <script>
        if(true) {
            var let = 1;
        }
        console.log(a);
    </script>

 

 

 

 

 

 

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM