提高javascript效率 一次判断,而不要次次判断_javascript技巧

判断嘛,就是面临2个或以上的选项时进行选择。比如我家门前去公司有一个岔路,只要我第一次知道了哪一条路是对的,那我下一次或以后的每次都不用再思考了,直接走那条路即可——当然,突发天灾时不算。
做出判断是需要时间的,是需要对应条件的。正确的判断很好,但每次面临岔路,哪怕是走了无数次的岔路,都来进行一下判断,无疑是一种脑残行为。

下面来看一个我们平时经常看到的JS函数,他的作用是判断浏览器类型然后设置对应的透明度属性:

复制代码 代码如下:

function setAlpha(obj,alpha){
if (-[1,]) obj.style.opacity = alpha / 100;
else obj.style.filter = "alpha(opacity=" + alpha + ")";
}

这个函数有错吗?没有。先判断浏览器是否是标准浏览器,如果是,就直接通过opacity设置透明;如果不是,则使用IE滤镜来实现透明度。

逻辑清晰,代码简练,精品啊!

不过,没有错误,却有失误。

通常,这种设置透明度的函数都会用来制作淡入淡出效果,也就是说它会被setTimeout一次次的调用,直到循环结束。

这时候问题就来了。回到前面的岔路问题,这个函数就相当于,每次来到路口,都要思考判断。第1次,来到路口,骚等,我看看,噢,是firefox啊,走第1条路;第2次,又来到这路口,等等,我看看,噢,又是firefox啊,还走第1条路……第3次……第4次。。。。不管多少次,这个函数都会像最敬业的交警一样来查看你的身份————你,不烦吗?你不烦我都烦了!

这时候,如果你是过路的,你肯定希望这个交警消失。

其实,遇到岔路我们可以这样:既然已经知道只走一条路,那我干脆把另外的路给堵死算了!当然在现实生活中不可能这样做,不过在代码里却不难实现,换个思路即可。

javascript有个神奇的地方,就是匿名函数(通常用来自执行),自执行函数的意思是呢,他声明的时候就执行掉了,以后就不会再出现了,你想找都不定能找到!个人觉得,这个性不错。

看下面的代码,同样是设置透明度的函数:

复制代码 代码如下:

var setAlpha = (function(obj,alpha){
var set;
if (-[1,]) {
set = function (obj,alpha) {
obj.style.opacity = alpha * 0.01;
}
}
else {
set = function(obj,alpha){
obj.style.filter = "alpha(opacity=" + alpha + ")";
}
}
return set;
})()

也许你要不满了:这是什么玩意儿啊,好像初学者的水平(被你看穿了。。。)但是!这个却比前面的版本效率高很多。不信你可以在firefox和ie6下分别alert一下这个函数,就明白了。

通过自执行函数,当声明setAlpha的时候就执行了函数,而这个函数的作用就是,判断浏览器,并确定该使用哪种设置透明度的方法。由于浏览器的类型在打开页面后就不可能再变化,也就是以后都不用再判断了。就算你调用10万次这个函数,他也不会再判断,而是直接执行。

虽然代码丑,但境界就不同了…

这个例子只是一个小小示范,我只是希望你能明白【一次判断,而不要次次判断】的道理,并发扬光大。减少判断次数,对js的效率是一个很大的提高。
转自:jo2.org

时间: 2024-08-25 11:34:25

提高javascript效率 一次判断,而不要次次判断_javascript技巧的相关文章

JavaScript 判断浏览器类型及版本_javascript技巧

几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的Chrome浏览器.由于Chrome出生名门,尽管他还是个小家伙,没有人敢小看他.以后,咱们常说浏览器的"四大才子"就得改称为"五朵金花"了. 在网站前端开发中,浏览器兼容性问题本已让我们手忙脚乱,Chrome的出世不知道又要给我们添多少乱子.浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本. JavaScript是前端开发的主要语言,我们可以通过编写J

Javascript中判断对象是否为空_javascript技巧

发现了一个巧妙的实现: 需要检查一个对象(Object)是否为空,即不包含任何元素.Javascript 中的对象就是一个字典,其中包含了一系列的键值对(Key Value Pair).检查一个对象是否为空,等价于检查对象中有没有键值对.写成代码,形如: if (isEmptyObject(obj)) { // obj is empty } else { // not empty } 至于 isEmptyObject 的实现,jQuery 中有一个很有想法的方式,请看代码:  function

JavaScript判断是否是微信浏览器_javascript技巧

先给大家说下实现原理 根据判断UA中是否有关键字micromessenger,有的话则是微信内置浏览器 实现代码如下所示: //判断是否微信登陆 function isWeiXin() { var ua = window.navigator.userAgent.toLowerCase(); console.log(ua);//mozilla/5.0 (iphone; cpu iphone os 9_1 like mac os x) applewebkit/601.1.46 (khtml, lik

Javascript如何判断数据类型和数组类型_javascript技巧

这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number:什么整数啊浮点数啊都叫数字,你懂的~ Boolean: 就是true和false啦 undefined:未定义,就是你创建一个变量后却没给它赋值~ null: 故名思久,null就是没有,什么也不表示 object: 这个我也很难解释的

JavaScript判断浏览器类型的方法_javascript技巧

本文实例讲述了JavaScript判断浏览器类型的方法.分享给大家供大家参考.具体实现方法如下: <script type="text/javascript"> var Sys = {}; var ua = navigator.userAgent.toLowerCase(); alert(ua); var s; (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1]: (s = ua.match(/firefox\/([\d.]+)/

JavaScript脚本判断蜘蛛来源的方法_javascript技巧

今天介绍的这个JS判断蜘蛛来源的方法脚本是写在body的onload里面的.即页面加载时进行判断.代码如下: body {onload:expression( if(window.name!="Yang"){ var str1 = document.referrer; str1 = str1.toLowerCase(); var str6 = 'google.'; var str7 = 'baidu.'; var str4 = 'yahoo.'; var str8 = 'youdao.

JavaScript中判断数据类型的方法总结_javascript技巧

typeoftypeof用的比较多的时候,是判断某个全局变量在不在,假如某个页面定义了一个全局变量.假如你做如下判断: //haorooms是全局变量 if(haorooms!=undefined){ }//js会报错,说"Uncaught ReferenceError: haorooms is not defined" 解决的方法是我们如下写: if(typeof haorooms!=undefined){ } 用了typeof之后,就不会报错了!这是typeof的应用之一! 此外,

JavaScript每天必学之数组和对象部分_javascript技巧

对象部分  Object类型  Object 是一个无序的集合,可以存放任意类型对象,所有其他对象都继承自这个对象.  创建Object类型有两种,一种是使用new运算符,一种是字面量表示法.  1.使用new运算符创建Object var obj = new Object();//注意大写,也可以直接写成Object() 注意,通过new Object() 的写法生成新对象,与字面量的写法 obj = {} 是等价的.  2. 使用字面量方式创建: var obj = { name : 'tr

在JavaScript中,为什么要尽可能使用局部变量?_javascript技巧

不这么做,对性能到底能带来多大的损失?本文就来探讨这些问题的答案,从根本上了解变量的读写性能都和哪些因素有关. 著作权声明 本文译自Nicholas C. Zakas于2009年2月10日在个人网站上发表的<JavaScript Variable Performance>.原文是唯一的正式版,本文是经过原作者(Nicholas C. Zakas)授权的简体中文翻译版(Simplified Chinese Translation).译者(明达)在翻译的准确性上做了大量的努力,并承诺译文的内容完全