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

 

  }

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-11-24 14:51  ujung苏  阅读(1187)  评论(1编辑  收藏  举报