收藏
回答

ES6语法+代码混淆导致声明错误

问题模块 框架类型 问题类型 终端类型 微信版本 基础库版本
框架 小程序 Bug 客户端 7.0.4 2.7.0
function test(){
  let obj = {
      test1: 1,
      test2: 2,
      test3: 3,
      test4: 4,
      test5: 5
    },
    tmp = "" + Date.now();
 
  console.log("ts: ", tmp);
 
  for (let tmp in obj) {
    if (tmp) {
      console.log("有效key:", tmp);
    }
  }
}


此段代码采用了ES6语法,在支持的环境下运行是没有问题的。但如果在开发工具中不勾选ES6转ES5且勾选了代码混淆后,混淆代码则变成如下:

function a() {
    let a = {
        test1: 1,
        test2: 2
    },
    b = "" + Date.now();
 
    for (let b in console.log("ts: ", b), a)
      b && console.log("\u6709\u6548key\uFF1A", b)
}


小弟才学疏浅,for in 执行时序不清楚,报错的具体原理也尚不明确。但应该是与for in 循环内的作用域块是相关的。这种情况我是出现在用rollup打包压缩过的类库后,出现了重复的声明。我也不知道是不是只会出现在用rollup打包的类库上,还是webpack等构建工具里的uglify插件也会出现。


试了一下预发布版以相同的设置,预发布版(1.02.1907081 win64)以这个测试用例不会出现这个问题。而稳定版(1.02.1904090)这个测试用例会有问题。


iOS:



安卓:



求大神解答

最后一次编辑于  2019-07-10
回答关注问题邀请回答
收藏

1 个回答

  • 社区技术运营专员-小柿子
    社区技术运营专员-小柿子
    2019-07-09

    报错信息是?

    2019-07-09
    赞同
    回复 2
    • 烧饼
      烧饼
      2019-07-10

      只有两台测试机


      iPhone 7  iOS 11 微信7.0.4   报Cannot access uninitialized variable;

      小米8 安卓9.0 微信7.0.4 Chrome 67 报 ReferenceError *** is not defined


      iOS报错:


      安卓报错:



      错误原因都是出现了for(let a in console.log(a), ........)

      2019-07-10
      回复
    • 烧饼
      烧饼
      2019-07-10

      预发布版(1.02.1907081 win64)测这个测试用例不会出现这个问题

      而稳定版(1.02.1904090 win64)会出现问题,是已经修复了吗。

      2019-07-10
      回复
登录 后发表内容