JS编程实践指点

防止两重求值

eval()、Function()组织函数、setTimeout()、setInterval()。每一个要领许可你传入一个javascript代码字符串并实行它。
比方:`setTimeout("sum=num1+num2",100);`
当你在javascript代码中实行另一段javascript代码时,每次挪用都邑建立一个新的诠释器/编译器实例,异常斲丧机能,代码实行速率会慢很多。

防止反复事情

最常见的反复事情:浏览器探测。
反例:
function addHandler(target,eventType,handler){
    if(target.addEventListerner){//DOM2 Events
        target.addEventListener(eventType,handler,false);
    }else{//IE9以下
        target.attachEvent("on"+eventType,handler);
    }
}
该例子乍一看好像已优化了,隐蔽的机能问题在于每次函数挪用时都做了反复事情。由于每次的搜检历程都是雷同的,看看指定要领是不是存在。然则实在搜检一次就够了。
解决方案:
1.耽误加载(Lazy Loading)
function addHandler(target,eventType,handler){
    if(targrt.addEventListerner){
        addHandler=function(target,eventType,handler){
            target.addEventListerner(eventType,handler,false);
        };
    }else{
        addHandler=function(target,eventType,handler){
            target.attachEvent("on"+eventType,handler);
        };
    }
}
//以上要领会在函数第一次挪用时,搜检并决议运用哪一种要领去绑定事宜处理器。然后原始函数被包括准确操纵的新函数掩盖。
2.前提预加载(Conditional Advance Loading)
前提预加载会在剧本加载时期提早检测,而不会比及函数被挪用时。
var addHandler=document.body.addEventListerner ? 
    function(target,eventType,handler){
        targrt.addEventListerner(eventType,handler,false);
    }:
    function(target,eventType,handler){
        target.attachEvent("on"+eventType,handler);
    };
    原文作者:Lizzy0077
    原文地址: https://segmentfault.com/a/1190000008353358
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞