javascript for循环设法提高性能


Posted in Javascript onFebruary 24, 2010

一般在javascript里对数组进行遍历一般是使用for循环,像下面一样

var arr = []; 
for(var i=0; i<arr.length; i++){ 
//loop 
}

这种代码最大的问题,就在于每次循环时都要通过 .操作符获取 .length,增加了开销。那么我们可以这样改进。
var arr = []; 
for(var i=0, n=arr.length; i<n; i++){ 
//loop 
}

这样子,先把 arr.length暂存到 n 变量中去。只在开始时获取一次。
但是这样就没问题了吗?貌似多定义了个无意义的变量 n 。好那继续改进
var arr = []; 
for(var i=arr.length-1; i > -1; i--){ 
//loop 
}

好这样子,我们把这个循环顺序倒过来,就把那个n去掉了,而使用了一个常量-1。
如果应用场景,允许不使用 for 循环的话。我们可在使用 while代替
善于使用这两种循环语句,以提高javascript的效率。
var arr = []; 
var i=arr.length-1; 
while(i--){ 
//loop arr[i] 
}

或者
var arr = []; 
var i=arr.length-1; 
do { 
// loop arr[i] 
}while(--i)

这样代码更简洁,效率更好,特别是如果允许先执行一次循环体的情况下,使用do while效果很明显。
唯一的问题是把 i 移到循环外了。
Javascript 相关文章推荐
Prototype使用指南之array.js
Jan 10 Javascript
一个js拖拽的效果类和dom-drag.js浅析
Jul 17 Javascript
浅谈javascript 迭代方法
Jan 21 Javascript
JavaScript学习笔记之JS函数
Jan 22 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
Sep 02 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
浅析上传头像示例及其注意事项
Dec 14 Javascript
jQuery中的deferred使用方法
Mar 27 jQuery
微信小程序 sha1 实现密码加密实例详解
Jul 06 Javascript
VUE使用axios调用后台API接口的方法
Aug 03 Javascript
vue style width a href动态拼接问题的解决
Aug 07 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
Sep 24 Javascript
判断控件是否已加载完成的代码
Feb 24 #Javascript
json-lib出现There is a cycle in the hierarchy解决办法
Feb 24 #Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
Feb 24 #Javascript
javascript Firefox与IE 替换节点的方法
Feb 24 #Javascript
jQuery 性能优化手册 推荐
Feb 23 #Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
Feb 23 #Javascript
JSON 学习之JSON in JavaScript详细使用说明
Feb 23 #Javascript
You might like
用mysql内存表来代替php session的类
2009/02/01 PHP
php学习之function的用法
2012/07/14 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
24式加速你的Python(小结)
2019/06/13 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
索桥的故事教学反思
2014/02/06 职场文书
调解员先进事迹材料
2014/02/07 职场文书
维修工先进事迹
2014/05/29 职场文书
医德医魂心得体会
2014/09/11 职场文书
员工年度工作总结2015
2015/05/18 职场文书
遗嘱格式范本
2015/08/07 职场文书