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


Posted in Javascript onMarch 30, 2012

判断嘛,就是面临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

Javascript 相关文章推荐
javascript 正则替换 replace(regExp, function)用法
May 22 Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 Javascript
JS制作类似选项卡切换的年历
Dec 03 Javascript
微信小程序开发(二)图片上传+服务端接收详解
Jan 11 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
Mar 29 Javascript
JavaScript贪吃蛇小组件实例代码
Aug 20 Javascript
实例分析JS与Node.js中的事件循环
Dec 12 Javascript
微信小程序实现同一页面取值的方法分析
Apr 30 Javascript
详解vue父子组件关于模态框状态的绑定方案
Jun 05 Javascript
js+canvas实现两张图片合并成一张图片的方法
Nov 01 Javascript
Threejs实现滴滴官网首页地球动画功能
Jul 13 Javascript
Echarts如何重新渲染实例详解
May 30 Javascript
一个关于javascript匿名函数的问题分析
Mar 30 #Javascript
JavaScript 基础篇(一)
Mar 30 #Javascript
js确定对象类型方法
Mar 30 #Javascript
js 浏览器事件介绍
Mar 30 #Javascript
js中eval详解
Mar 30 #Javascript
关于jquery性能最佳实践的讨论,与求教
Mar 30 #Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 #Javascript
You might like
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
Python常用模块用法分析
2014/09/08 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
简单解决Python文件中文编码问题
2015/11/22 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
Django用户认证系统 User对象解析
2019/08/02 Python
python中open函数的基本用法示例
2019/09/07 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
linux面试相关问题
2013/04/28 面试题
计算机系本科生求职信
2014/05/31 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
网络管理员岗位职责
2015/02/12 职场文书
七年级生物教学反思
2016/02/20 职场文书
会计专业自荐信范文
2019/05/22 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
php解析非标准json、非规范json的方式实例
2022/05/10 PHP