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学习之prop和attr的区别示例介绍
Nov 15 Javascript
JS中的log对象获取以及debug的写法介绍
Mar 03 Javascript
php+js实现倒计时功能
Jun 02 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
Jun 23 Javascript
javascript初学者常用技巧
Sep 02 Javascript
JS取得绝对路径的实现代码
Jan 16 Javascript
JavaScript 模块化编程(笔记)
Apr 08 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
Sep 08 Javascript
JavaScript中原型链存在的问题解析
Sep 25 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
Jan 20 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
iframe与主框架跨域相互访问实现方法
Sep 14 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
不错的PHP学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
PHP类的反射用法实例
2014/11/03 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
vue如何截取字符串
2019/05/06 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
Python实现读取并保存文件的类
2017/05/11 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
如何给Python代码进行加密
2020/01/10 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
如何利用Python识别图片中的文字
2020/05/31 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
电脑教师的自我评价
2013/12/18 职场文书
知识竞赛活动方案
2014/02/18 职场文书
幼儿生日活动方案
2014/08/27 职场文书
2015年药店工作总结
2015/04/20 职场文书
初中生物教学反思
2016/02/20 职场文书
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers