JS for循环中i++ 和 ++i的区别介绍


Posted in Javascript onJuly 20, 2016

平时都是这样写的for循环,

for(var i = 0; i < 20 ; i++){ 
.... 
}

但我看有的人这样写

for (var i = 0; i < 20 ; ++i) {
....
}

这样会对for循环有什么影响?

1.在for里好像没啥区别...

但是用在赋值的时候, 就有区别了...

var a = 1;
var b = a++;
var c = 1;
var d = ++c;
console.log(b,d); // 1, 2

a++ 是先应用a, 然后再自加

++a 是先自加, 然后在应用a

2.大概是 C/C++ 时代带来的习惯,传说 ++i 比 i++ 要快,但事实上这两者的性能在js中是差不多的。

至于具体细节,规范里面关于自增/自减运算符是这么写的:

对于放在前面的情况——

UnaryExpression : ++ UnaryExpression
Let expr be the result of evaluating UnaryExpression.
Let oldValue be ToNumber(GetValue(expr)).
ReturnIfAbrupt(oldValue).
Let newValue be the result of adding the value 1 to oldValue, using the same rules as for the + operator (see 12.7.5).
Let status be PutValue(expr, newValue).
ReturnIfAbrupt(status).
Return newValue.

 大致翻译一下:

1.令expr等于当前表达式(就是++后面的部分)的结果

2.令oldValue等于expr转换为数字的结果

3.使用和“+”运算符一样的规则,令newValue = oldValue + 1

4.将newValue赋值给expr

5.整个运算式返回newValue

对于放在后面的情况——

PostfixExpression : LeftHandSideExpression ++

1.Let lhs be the result of evaluating LeftHandSideExpression.

2.Let oldValue be ToNumber(GetValue(lhs)).

3.ReturnIfAbrupt(oldValue).

4.Let newValue be the result of adding the value 1 to oldValue, using the same rules as for the + operator (see 12.7.5).

5.Let status be PutValue(lhs, newValue).

6.ReturnIfAbrupt(status).

7.Return oldValue.

大致翻译——

1.令lhs等于当前表达式(++前面的部分)的结果

2.令oldValue等于lhs转换为数字的结果

3.使用和“+”运算符一样的规则,令newValue = oldValue + 1

4.将newValue赋值给lhs

5.整个运算式返回oldValue

可以看到,这两者的的区别只是最后一步,整个运算式是返回加一后的还是加一前的。

对于for语句而言:

for(var i = 0; i < n; i++)

最后一栏仅仅是自加,并没有把这个值赋值给谁,所以从这一点来看,++符号放在前面或者是后面都是一样的。

3.事实上没有太大区别。但是如果要追求那一点点效率问题的话,++i确实会效率高一些.

确实是从c++的std标准库而来,当i是一个std容器的iterator时,i不是一个数字,i++会多产生一个赋值操作,因此++i性能更高。所以c++习惯的人,在i不是数值时,喜欢用++i来节省开销。

以上所述是小编给大家介绍的JS for循环中i++ 和 ++i的区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript编程起步(第六课)
Jan 10 Javascript
window.addeventjs事件驱动函数集合addEvent等
Feb 19 Javascript
如何用JavaScript动态呼叫函数(两种方式)
May 03 Javascript
jQuery的选择器中的通配符使用介绍
Mar 20 Javascript
Javascript 浮点运算精度问题分析与解决
Mar 26 Javascript
javascript将异步校验表单改写为同步表单
Jan 27 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
原生JS中slice()方法和splice()区别
Mar 06 Javascript
浅谈node中的exports与module.exports的关系
Aug 01 Javascript
基于Bootstrap表单验证功能
Nov 17 Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 Javascript
使用Layui搭建后台管理界面的操作方法
Sep 20 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
Jul 20 #Javascript
Node.js如何自动审核团队的代码
Jul 20 #Javascript
js只执行1次的函数示例
Jul 20 #Javascript
JQuery为元素添加样式的实现方法
Jul 20 #Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
Jul 20 #Javascript
javaScript给元素添加多个class的简单实现
Jul 20 #Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 #Javascript
You might like
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
一些不错的js函数ajax
2008/08/20 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
js关于字符长度限制的问题示例探讨
2014/01/24 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
vue实现商城上货组件简易版
2017/11/27 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
基于python实现简单日历
2018/07/28 Python
对python周期性定时器的示例详解
2019/02/19 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
程序员机试试题汇总
2012/03/07 面试题
化工专业应届生求职信
2013/11/08 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
企业环保标语
2014/06/10 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
2014年检验员工作总结
2014/11/19 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
Moment的feature导致线上bug解决分析
2022/09/23 Javascript