文章出现的原因是代码遇到了问题,关于++的问题,所以在此进行一些总结
一、前置++和后置++的区别
前置++的运算过程是先计算,后赋值(先执行++,后执行赋值=)
let a = 0
let i = ++a
console.log(i)//1
后置++的运算过程是先赋值,后计算(先执行赋值=,后执行++)
注意!!!
后置++可以浅显的理解为上面所说,但整个过程并不是简单如此
由于本次的重点不是这个,所以就在此一笔带过了,相信了解的人也了解两者的区别
二、关于后置++的问题(重点)
1.代码
先将一下,本人在某段时间突然脑子短路,写了一个点击自增的事件,代码如下
const btn = docuement.querySelector('button')
let i = 0
btn.onclick = function() {
// 我当时以为效果是一个自增
i = i++
console.log(i)
}
最后我写完进行点击时发现打印的结果一直为0,也就是没有实现自增的效果
2.错误理解
后置++时先赋值后自增,所以i先被赋值为0,然后自增为1;
但为何打印结果却一直是0呢?
3.正确理解
i = i++这段代码在栈的流程:
1).i这个数(0)会放到操作数栈;(操作数栈:0 局部变量表:空)
2).从操作数栈存储到局部变量表;(操作数栈:空 局部变量表:0)
3).从局部变量表加载到操作数栈;(操作数栈:0 局部变量表:0)
4).局部变量表中的数进行自增(i自增成1);(操作数栈:0 局部变量表:1)
5).从操作数栈存储到局部变量表。(操作数栈:空 局部变量表:0)
整个过程用代码可以这样理解:
let i = 0
let temp = i //把变量i存到临时变量中
i = i + 1 //进行自增
i = temp //进行赋值
以上便是本次的分享,如有问题可以私信或评论