UglifyJS压缩的一个奇怪的bug及解决办法

今天遇到一个很奇怪的问题,在开发测试没有问题的JS代码,放到服务器上chrome就报错,错误为‘[color=red]ReferenceError: b is not defined[/color]’,初步断定是UglifyJS压缩有问题,我们将未压缩的代码放到服务器上,发现问题消失。
接着就要查找原因了,将压缩的代码用netbeans打开,使用ALT+SHIFT+F格式化,找到了错误的地方,下面贴出错误压缩的源码和压缩后代码。

$.each(['keydown','keyup','change','focus','blur'],function(i,event){
$input.bind(event+eventNamespace,function(e){
if(!readyToOnBlur && (event == 'blur')) return false;
$this._trigger('on'+event, e, null);
//a
});
});

压缩后

a.each(["keydown","keyup","change","focus","blur"],function(a,g){
f.bind(g+d,function(a){
return c||g!="blur"?(e._trigger("on"+g,a,null),b):!1
})
});

比较代码可以看出,第一段代码a位置后面隐含了一个return undefined,第二段的b===undefined,于是我想这样我最后加一个return true,就可以破坏这个等式,问题就可以解决了,事实证明有效。
不过后来又传出有类似的bug,都是‘[color=red]ReferenceError: b is not defined[/color]’,难道要一个个改吗?还是改UglifyJS源码修正这个问题,似乎都不是简单的事,这令我左右为难啊,终于我灵光一闪,错误是ReferenceError,表示代码里找不到该变量,而这个变量b===undefined,既然如此,我何不创建一个。想到这层,解决方案就简单了。
我在页面开始处加了一段如下代码:

<script>
var b;
</script>

于是问题一劳永逸的解决了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值