🪐写在前面的废话:a++与++a从入门学C就开始困扰我,学了忘忘了又学。关键是当时并没有理解透彻。最近在学习闭包的知识点时又遇到了这个问题,索性整理一遍,一次彻底搞定自增运算符
语法规则
a++先用后加,++a先加后用。
基本运算
a++
var a=1;
b=a++; //b=a++;先把a的值赋给b,然后a自增1
console.log(b); //输出:1
console.log(a); //输出:2
//同理
var a=1;
console.log(a++); //输出:1,此时a=2
++a
var a=1;
b=++a; //b=++a;a先自增1,然后把自增后的值赋给b
console.log(b); //输出:2
console.log(a); //输出:2
//同理
var a=1;
console.log(++a); //输出:2,此时a=2
综合理解
var a=1;
console.log(a++); //输出:1 ,此时a=2
console.log(++a); //输出:3 ,此时a=3
console.log(++a); //输出:4 ,此时a=4
console.log(a++); //输出:4 ,此时a=5
console.log(a); //输出:5 ,此时a=5
经典题型
🌰题型一
var a=1;
a=a++;
console.log(a); //输出:1
//解题思路:
//1. 先把a的值备份一份并直接赋予等号左边的变量a,此时,左边的变量a的值依然是1;
//2. 等号右边的a把备份值赋予出去后,自己在原来的数值上自加1,就为2;
//3. 输出变量a的值。关键是:输出语句括号里的变量代表的是哪一个a? 如果输出语句上面有一个赋值的语句,那么一定是等号左边的a。
//同理可得
var a=1;
a=++a;
console.log(a); //输出:2
🌰题型二
var a=1;
a=a++; //此时a=1
console.log(a++); //输出:1,a=2
//解题思路:相当于在题型一的基础上操作,再结合基本运算中的直接输出a++可得出结论
//同理可得
var a=1;
a=a++; //此时a=1
console.log(++a); //输出:2,a=2
//同理可得
var a=1;
a=++a; //此时a=2
console.log(a++); //输出:2,a=3
//同理可得
var a=1;
a=++a; //此时a=2
console.log(++a); //输出:3,a=3
🌰检验一下1
var num=9;
num=num++;
console.log(num); //第一个输出:❓
num=++num;
console.log(++num); //第二个输出:❓
答案: 第一个输出 9 ,第二个输出 11
🌰检验一下2
let a = 5;
let b = 4;
console.log(++b+a*2+b++)
答案: 输出20
过程: ①++b --> b=5 ②a*2 --> 10 ③b++ --> b=5 在当前语句结束后再进行自增 ④5+10+5=20
🌰检验一下3
let a = 5;
console.log(++a+a++) //第一个输出:❓
let a = 5;
console.log(a+++++a) //第二个输出:❓
答案: 第一个输出 12 ,第二个输出 12
解析: 第一个 6+6=12,第二个 5+7=12