本文主要是介绍打包后导致if-else发生颠倒,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
有次用环境上已经打包后的代码进行调测,发现打包后的代码和自己本地代码不一致的情况
类似下面的语句
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
这篇关于打包后导致if-else发生颠倒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!