变量提升和函数提升:

   就是将变量声明或者函数全部代码提升到当前作用域(全局作用域或函数作用域)最开始的部分。

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
  }

   

最新文章

  1. JDK Collection 源码分析(2)—— List
  2. salesforce 零基础学习(四十一)Group
  3. [Leetcode] Palindrome Partitioning
  4. Excel应该这么玩——0、初衷:用IT方法玩Excel
  5. 2016 ACM/ICPC Asia Regional Qingdao Online 1001/HDU5878 打表二分
  6. read 不回显的方法
  7. bitmap的实现方法
  8. Android studio 删除Module、project
  9. PYTHON 获取机器硬件信息及状态
  10. CSS Positioning(定位)
  11. linux source命令与export命令的区别
  12. CF592D Super M
  13. echarts 中国地图 数据自动提示
  14. windows yii2 配置redis
  15. Hdoj 1846.Brave Game 题解
  16. js基础学习
  17. Some untracked working tree files would be overwritten by checkout. Please move or remove them before you can checkout. View them
  18. codeforces gym 100971 K Palindromization 思路
  19. Dubbo简介---搭建一个最简单的Demo框架
  20. matlab:eval用法

热门文章

  1. SQL-W3School-基础:SQL UPDATE 语句
  2. Splinter自动登录
  3. centos7 更改ip
  4. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_04-freemarker基础-基础语法种类
  5. PostgreSql 使用自定义序列(Sequence)向表插入数据
  6. 一步一步搭建Nuget私服
  7. delphi 中如何从数据库中读取数据自生成TreeView,只有两个字段,数据库结构如下。急急!!
  8. 阿里云服务出现TCP连接快速增加尤其是NON_ESTABLISHED大量增加导致内存和CPU暴增系统无法使用的问题
  9. 利用工具破解HTTP身份验证的多种方法
  10. Css3 伪元素