有次用环境上已经打包后的代码进行调测,发现打包后的代码和自己本地代码不一致的情况
类似下面的语句
if(!asd){
//执行语句A
} else{
//执行语句B
}
打包后会变成
if(asd){
//执行语句B
} else{
//执行语句A
}
理论上就算出现这种情况,代码逻辑是没有变化的,但是我们有时就是想先执行本来的"否定判断"
和同事谈论还是很难发现问题所在
对比代码后发现,并不是所有的语句顺序会被调换
同事的意思是格式化,
可能是webpack压缩使用的是terser,而这个包可能会导致一些format问题
比如eslint也有不允许if里面写否定判断的条件
但是因为项目并不是所有的if里面写否定判断都会导致顺序调换,因此这种说法存疑,但也是一个方向
在进行多次对比之后发现是因为else里面写了var,可能是变量提示导致的?
继续对比
else中var提升的问题暂时只发现在if中用否定条件判断的时候出现,
if中其他判断的时候就算else中使用var,也没发现这种提升问题
综合起来有两方面的共同影响
if使用否定条件判断+else中用var声明变量
不要在if-else中声明中声明变量,而是在if-else外部声明,这也是符合js标准的,防止发生奇奇怪怪的现象o(╥﹏╥)o