我最近在与一位同事讨论我们的编码实践中的一些差异,在那里我提出了一个关于他在他的事件处理程序中过度使用上述两种方法的问题。具体来说,它们看起来都是这样的......
$('span.whatever').on('click', function(e) {
e.preventDefault();
e.stopPropagation();
/* do things */
});
他声称这是一个很好的实践,没有可预见的反弹,并且将改善跨平台支持,同时减少未来的意外问题。
我对你们的问题:如果他是对的,为什么 jQuery 团队没有将这种行为全局应用于所有事件处理程序?实际上,我的假设是他错了,仅仅是因为这些方法可以独立使用,但谁知道……非常感谢您的洞察力。
--
更新:我做了一个简单的速度测试,这两个功能造成了一点阻力,但没有什么特别明显的。不过,除其他外,我认为在使用它们时要慎重考虑是一个很好的理由。
$('span.whatever').on('click', function(e) {
var start = new Date();
for (i = 0; i < 999999; i++) {
e.preventDefault();
e.stopPropagation();
}
console.log( new Date() - start );
});
上面记录了约 9.5 秒,当我将函数调用退出循环时,约 2.5 秒。