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:
安卓:
求大神解答
报错信息是?
只有两台测试机
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), ........)
预发布版(1.02.1907081 win64)测这个测试用例不会出现这个问题
而稳定版(1.02.1904090 win64)会出现问题,是已经修复了吗。