问题描述
某些浏览器嗅探(根据浏览器是否存在某方法,再进行调用)工作,每次调用函数时的重复分支判断,只需要判断一次即可确定。
解决方案
可以利用高阶函数返回封装后的函数。为防止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>
