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 相关文章推荐
javascript操作文本框readOnly
May 15 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
Dec 13 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
Feb 04 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
Oct 14 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
jquery实现简单的遮罩层
Jan 08 Javascript
node模块机制与异步处理详解
Mar 13 Javascript
JavaScript正则表达式实例详解
Oct 16 Javascript
Vue-cli创建项目从单页面到多页面的方法
Sep 20 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
Dec 05 Javascript
vue-cli项目修改文件热重载失效的解决方法
Sep 19 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 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 empty函数判断mysql表单是否为空
2010/04/12 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
[19:15]DK战队纪录片
2014/09/02 DOTA
Python计算一个文件里字数的方法
2015/06/15 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
浅谈flask源码之请求过程
2018/07/26 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
几个Shell Script面试题
2014/04/18 面试题
工作自我评价分享
2013/12/01 职场文书
初中物理教学反思
2014/01/14 职场文书
关于母亲节的感言
2014/02/04 职场文书
工作总结与自我评价
2014/09/18 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers