不同浏览器之间存在兼容性问题,当一段代码需要询问浏览器是否兼容时,需要使用if语句,如果是个事件触发函数,那么每次调用都需要执行一遍if语句,使用惰性载入可以使if语句执行一遍。
原来函数:
function addeven(){
if(typeof addEventListener=="function"){
element.addEventListener("click",function);
}else if(element.atachEvent){
element.atachEvent("click",function);}
}
方法一:函数覆盖;
function addeven(){
if(typeof addEventListener=="function"){
addevent=function(){
element.addEventListener("click",function);
}}else if(typeof attachEvent=="function"){
addevent=function(){
element.attachEvent("click",function);}
}}
也就是说,第一次判断if条件的时候直接将函数的程序覆盖了,后面直接执行被改变的函数内容,没有判断语句了;
方法二:
var addevent=(function(){
if(elem{element.addEventListener){
return function(){ };
}else if(element.attachEvent){
return function(){ };
}
}) ()
----------------------------------------------------------------------------------------------------
方法二可能有小伙伴看不太懂:(function(){}) ()这种格式是什么狗东西??,下面讲一下:
对于函数的声明有很多方式,下面看看:
方式一:
function A(){ };
这种声明,在函数的前后都可以调用,因为js解释器会提前编译,即使在函数声明前调用也能找到函数;
方式二:
var A=function(){ };
这种是函数表达式,即将函数赋给A,这种函数不能够在函数声明前被调用,因为js解释器在遇到这一句的时候才会编译。
方式三:
var A =function(){ } ();
在函数表达式后面直接加(),浏览器会直接把它看作表达式,红色括号内是形参,绿色括号内是实参,传入实参直接运行计算出函数的值,把这个值赋给A变量;
例子一:
var A =function(i ){ return i;} (6);
console.log (A); // 6
例子二:
var A=(function(){ }) ();
执行粉色括号时,向浏览器返回一个未命名的函数,遇到蓝色括号时,立即执行返回的未命名函数,就是说,不加蓝色括号的时候,A的值是一个函数,加了蓝色括号后,(function(){ }) () 成为了一个表达式,所以A是个数; 粉色括号可加可不加;