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 相关文章推荐
Jquery 基础学习笔记之文档处理
May 29 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
Jan 23 Javascript
基于JQuery的列表拖动排序实现代码
Oct 01 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
node.js Web应用框架Express入门指南
May 28 Javascript
director.js实现前端路由使用实例
Feb 03 Javascript
jQuery简单实现日历的方法
May 04 Javascript
JavaScript中函数(Function)的apply与call理解
Jul 08 Javascript
AngularJS 2.0新特性有哪些
Feb 18 Javascript
JS关闭窗口时产生的事件及用法示例
Aug 20 Javascript
浅谈Three.js截图并下载的大坑
Nov 01 Javascript
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
判断控件是否已加载完成的代码
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
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
Javascript 布尔型分析
2008/12/22 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
JavaScript模块详解
2017/12/18 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
幼儿教师考核制度
2014/01/25 职场文书
车辆年审委托书范本
2014/09/18 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS