zoukankan      html  css  js  c++  java
  • let作用域问题

    1. 在使用let定义变量时遇见这样一个错误
       1 async addPageVersion(uuid, param) {
       2          let result = await this.getVersions(uuid, {pageData: param.pageData});
       3          if(result&&result.length) {
       4              //更新时间
       5              let result = await to(Pageversion.findOneAndUpdate({uuid,pageData: param.pageData}, {updateTime: param.updateTime}));
       6          }else{
       7              //添加
       8              let res = await this.getVersions(uuid);
       9 
      10           let { uuid, lastAuthor, pageData, updateTime, imgUrl } = param;
      11              let pageVersion = new Pageversion({uuid,lastAuthor, pageData,updateTime, imgUrl});
      12              result = await to(pageVersion.save());
      13          }
      14      }

      if里面可以获取到参数uuid,但是在else里面我们的参数uuid会为undefine??

    2. let定义的变量会有块级作用域,第12行定义的let会覆盖掉传入的参数uuid。
    3. 但是还有一个问题,为什么uuid会是undifined而不是报错呢?
    4. 原因其实是因为我们的代码并不是直接执行的,而是通过编译工具执行。区别在于编译之后的代码会存在作用域提升,并且会改变变量名称。相当于代码变成了下面的写法(参考:https://segmentfault.com/q/1010000018839614)
      function a(uuid) {
         if(..) {
          ...
         }  else {
           console.log(_uuid);
           var _uuid = ??;  
         }
      }
  • 相关阅读:
    Filter and Listener
    Cookie Session
    怎样快速将一台电脑虚拟机导入另外一台电脑
    网页下载文件服务端代码
    图片验证码生成代码
    Request实战
    Response
    设置页眉页脚的距离
    页眉页脚的设置
    节的设置
  • 原文地址:https://www.cnblogs.com/longlongdan/p/11504984.html
Copyright © 2011-2022 走看看