星空网 > 软件开发 > Java

变量名提升

  1. 预解析的过程
  2. 代码的执行过程 程序在执行过程,会先将代码读取到内存中检查,会将所有的声明在此时进行标记。所谓的标记就是让js解释器直到有这个名字,后面在使用名字的时候,不会出现未定义的错误,这个标记就是提升 声明:
  3. 名字的声明,标识符的声明(变量名的提升)
    • 名字的声明就是让我的解释器知道有这个名字
    • 名字没有任何数据与之对应
  4. 函数的声明
    • 函数声明包含两部分
      • 首先告诉解释器函数的名字
      • 告诉解释器 这个名字对应的函数体是什么
    • 函数声明与函数表达式有区别,函数声明是单独写在一个结构中,不存在任何语句,逻辑判断等结构中 ``` 函数声明: function(){} function f(){}
``` 函数表达式:  var f=function(){};  this.sayHello=function(){};  if(true){    function f(){}  }

代码分析:

案例1:

  var num=1;  function num(){    alert(num);  }  num();
  1. 预解析过程
    • 提升声明 变量num
    • 再提升函数 num在内存中已经存在,因此直接绑定对应的函数体
    • 内存中有一个函数num
  2. 执行代码
    • 给num赋值为1,覆盖函数
  3. 调用num 由于num中存储的是数字1 因此报错

案例2:

  var num=123;  function foo1(){    console.log(num);    var num=456;    console.log(num);  }  foo1();

代码分析:

  1. 预解析过程
    • 提升变量名num和函数foo1
  2. 执行代码
    • 给num赋值为123
    • 调用函数
      • 进入函数的瞬间预解析,提升变量名num
      • 在函数内部是一个独立的空间,允许使用外部的变量即num覆盖外面的num
      • 执行第一句 输出为Undefined
      • 执行第二句 给num赋值为456
      • 执行第三句 输出为456

案例3:

  if(true){    function f1(){      console.log('true');    }  }else{    function f1(){      console.log('false');    }  }  f1();

代码分析:

  1. 预解析过程
    • 函数在判断语句中为表达式所以不提升
  2. 执行代码
    • 执行if语句,条件成立,输出true
    • 但是一些老版本在执行过程中,会把If语句中的函数表达式当成函数声明来解析, 并提升函数输出为false*



原标题:变量名提升

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

Amy聊跨境:B2B与B2C模式,哪个更适合做跨境电商?:https://www.ikjzd.com/articles/129495
Amy聊跨境:B2B与B2C模式,哪个更适合做跨境电商?:https://www.ikjzd.com/articles/129496
2019年中国跨境电商市场规模首度突破10万亿大关:https://www.ikjzd.com/articles/129498
被无数外贸人哭惨的2020年,全球跨境电商业务飙升21%:https://www.ikjzd.com/articles/129499
亚马逊发货的三种模式:FBA、第三方海外仓和自发货:https://www.ikjzd.com/articles/12950
亚马逊广告怎么优化,这8条准则要牢记!:https://www.ikjzd.com/articles/129500
长治婚庆女司仪和主持人:https://www.vstour.cn/a/366176.html
北京丰台区水上乐园哪家好玩?:https://www.vstour.cn/a/366177.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流