《js高级程序设计》之惰性载入

不同浏览器之间存在兼容性问题,当一段代码需要询问浏览器是否兼容时,需要使用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是个数; 粉色括号可加可不加;

猜你喜欢

转载自blog.csdn.net/kalinux/article/details/82657150
今日推荐