惰性函数
就是很懒,不知道自己的作用,它的作用由第一次的执行来决定
例子:
function fn(type) {
if (type == 1) {
fn = function () {
console.log(1);
}
//返回后调用fn(type)=fn()
} else if (type == 2) {
fn = function () {
console.log(2);
}
}
return fn(type);
}
fn(1);
fn(2);
//输出结果 1,1 不管之后怎么弄都是1 第一次执行的时候函数就被调换了
下面看下事件处理兼容的例子
第一个
if (typeof el.addEventListener === 'function') {
affEvent = function (el, type, fn) {
el.addEventListener(type, fn)
}
}
else {
addEvent = function (el, type, fn) {
el.attachEvent('on' + type, fn);
}
}
return addEvent(el, type, fn);
第二个
function addEvent(el, type, fn) {
if (typeof el.addEventListener === 'function') {
affEvent = function (el, type, fn) {
el.addEventListener(type, fn)
}
}
else {
addEvent = function (el, type, fn) {
el.attachEvent('on' + type, fn);
}
}
return addEvent(el, type, fn);
}
正常来说第一个,去兼容的话,不管到哪个浏览器是否都需要执行两次,去判断。
而第二个代码就是不一样,确定了第一次执行的浏览器是哪种兼容,之后就一直都是这个,不会在去兼容别的。
相比较第一个,第二个更加的优化了代码的执行