zoukankan      html  css  js  c++  java
  • 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
      }

       

  • 相关阅读:
    Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据
    Android商城开发系列(五)—— 商城首页回到顶部和搜索框布局实现
    Android商城开发系列(一)——开篇
    Android商城开发系列(四)——butterknife的使用
    Android商城开发系列(三)——使用Fragment+RadioButton实现商城底部导航栏
    Android商城开发系列(二)——App启动欢迎页面制作
    使用git克隆指定分支的代码
    mongodb 3.x WiredTiger存储优化测试
    oracle 文件导出
    本地安装gem install --local redis-stat-0.4.13.gem
  • 原文地址:https://www.cnblogs.com/SYJ1205/p/11922416.html
Copyright © 2011-2022 走看看