• 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
      }

       

  • 相关阅读:
    计蒜客 跳跃游戏2
    计蒜客 跳跃游戏
    2018 计蒜之道-初赛 第一场 A-百度无人车
    poj 3625 (最小生成树算法)
    poj 3623(贪心)
    poj2386(dfs搜索水题)
    poj 2761 主席树的应用(查询区间第k小值)
    POJ 2456 编程技巧之------二分查找思想的巧妙应用
    POJ 1995(有关快速幂运算的一道水题)
    1441:【例题2】生日蛋糕
  • 原文地址:https://www.cnblogs.com/SYJ1205/p/11922416.html
Copyright © 2020-2023  润新知