JS for循环中i++ 和 ++i的区别介绍
平时都是这样写的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的区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:
- Extjs4.0 最新最全视频教程
- Javascript中toFixed方法的改进
- 5个常见可用性错误和解决方案
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- js数组实现图片轮播
- 杀毒软件 Dr.Web Anti-virus for Windows Vista 4.44.0 Beta
- js可突破windows弹退效果代码
- C#中循环语句:while、for、foreach的使用
- JSP脚本漏洞面面观
- for 提取文本整行内容的方法
- dos命令for用法详解
- for命令的一些bug分析
- 使用BAT一句话命令实现快速合并JS、CSS
- 批处理 FOR参数/F之tokens详解
- Lua中数字for循环实例
- 深入解读Lua中迭代器与泛型for的使用
- C#用链式方法表达循环嵌套
- js显示当前星期的起止日期的脚本
- 微信公众平台小程序开发大牛必备技能
- shell脚本循环语句