js中的函數提升和變量提升


變量提升和函數提升

   就是將變量聲明或者函數全部代碼提升到當前作用域(全局作用域或函數作用域)最開始的部分。

JavaScript中函數域為最小域范圍;for循環、while循環、if語句、switch語句的“{}”不是作用域。

一.變量提升:
   使用var聲明的變量,會提前到當前作用域的開始的位置,被聲明。原位賦值。

1.所指的形式:var  a = "提升";(必須有關鍵字“var”)

2.提升的方式:將“var a”,提升到當前作用域的頂部,a = "提升",在原型定義的位置。

3.具體代碼:

eg:

 1. console.log( a)  ----> undefined
   var a = 10;
      console.log(a)  ---->   10
 2.console.log(a);
  var a = "我是全局中的變量";
  console.log(a);
  function fn(){
    console.log(interiorA);
    var interiorA = "我是函數內的變量";
    console.log(interiorA)
  }
  fn();
      ↓↓↓↓↓↓↓↓
  變量提升執行順序
  var a ; //變量提升,此時只是聲明,並沒有賦值
  console.log(a);    // undefined
  a = "我是全局中的變量"  //  此時才賦值
  console.log(a);        //我是全局中的變量
 
  function fn() {
    var interiorA;     //變量提升,函數作用域范圍內
    console.log(interiorA);    //undefined
    interiorA = "我是函數內的變量"  //此時對局部變量進行賦值
    console.log(interiorA)      //我是函數內的變量
  }

 二.函數提升

   1.函數提升所指的形式:function fn(){......}(必須是函數聲明的形式,不能是函數表達式的形式)。 

   2.函數提升的方式:將“function fn(){......}”整個函數聲明代碼塊提升到當前作用域的頂部,

      原先位置以不存在該代碼。

   3.所有使用function聲明的函數,都會整體提升,只要當前作用域內聲明了數

      在任何位置都可以使用,賦值式創建函數,提升的聲明,不是。

      當函數和變量重名,變量的提升更高,函數的提升在變量的下面,

      導致值函數生效

    var a;

    function a(){}

    console.log(a);

    a = 10;

eg:  

  function fn(){

 

     console.log(a);

 

      var a = "hello";

 

      console,log(a);

 

      function a(){1}

 

      console.log(a);

 

      a = "world";

 

      console.log(a);

 

      function a(){2}

 

      cosole.log(a)

 

  }

 

  上式提升后等同於下式  

   function fn(){

 

      var a;            變量提升最高;

 

      function a(){1};       函數提升到變量下面;

 

      function a(){2};

 

      console.log(a);       f2

 

     a = "hello"

 

      console.log(a);       hello

 

      console.log(a);       hello

 

      a = "world"

 

      console.log(a)        world

 

      console.log(a)        world

 

  }

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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