我目前正在研究jQuery 1.8.1的源代码,发现jQuery可能有问题:
首先,使用disable()
停用回调,然后调用empty()
,然后使用add()
添加功能,最后调用fire()
,因为API解释了disable()
1}}:
禁止回调列表执行更多操作
对fire()
的最后一次调用不应该输出任何内容,但实际上,它输出'2'就好像没有调用disable()
一样;
var a = $.Callbacks();
a.add(function(){console.log('1');});
a.disable();
a.disabled(); //true
a.empty();
a.add(function(){console.log('2');});
a.fire(); //2
这是一个jQuery错误吗?
答案 0 :(得分:3)
这不是jQuery中的错误,至少不在disable
内。调用disable
确实使回调对象在所有实际用途中都是惰性的。
您的代码示例也会调用empty
,它会重新初始化回调对象,并在此过程中将其返回到可用状态。 那可能是一个错误,因为没有记录empty
来执行此操作。
删除对empty
的调用显然会导致预期的行为。