问题描述
某些浏览器嗅探(根据浏览器是否存在某方法,再进行调用)工作,每次调用函数时的重复分支判断,只需要判断一次即可确定。
解决方案
可以利用高阶函数返回封装后的函数。为防止IIFE的方式调用实际没有使用的函数,在第一次进入的时候重写这个函数,并调用,下一次进入的时候就不存在条件分支语句
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="div1">点我绑定事件</div>
<script>
let addEvent = function(elem, type, handler) {
if (window.addEventListener) {
addEvent = function(elem, type, handler) {
elem.addEventListener(type, handler, false);
}
}
if(window.attachEvent) {
addEvent = function(elem, type, handler) {
elem.attachEvent('on'+type, handler);
}
}
addEvent(elem, type, handler);
}
const div1 = document.getElementById('div1');
addEvent(div1, 'click', function(){
alert('click1');
});
addEvent(div1, 'click', function(){
alert('click2');
});
</script>
</body>
</html>