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(){......}”整个函数声明代码块提升到当前作用域的顶部,

扫描二维码关注公众号,回复: 7961224 查看本文章

      原先位置以不存在该代码。

   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
  }

   

猜你喜欢

转载自www.cnblogs.com/SYJ1205/p/11922416.html