写在前面
函数表达式这一章,看到闭包,又卡壳了,懵逼了。。。去看了《你不知道的JavaScript》,查了资料,感觉稍微理解了一点,但是这个概念对我来说还是不清晰啊。。。我能怎么办,我也对自己的智商很无奈啊。。。算了,先搞简单的吧。操作符够简单了吧,但是递增递减操作符我还真就容易出错,今天看的时候还出错了。。。所以只能说还是没有完全理解,我觉得一件事只有自己能表述清楚了才是真的理解了。本着这个原则,虽然是基础简单的东西,但既然自己这么容易出错,就记录一下吧。以后有这些小的知识点容易错、记不住的也都记录一下吧,不能眼高手低。今天碎碎念的废话有点多啊~
开始了
递增和递减操作符分为前置和后置的两种,前置的长这样:--num
、++num
,后置的长这样:num--
、num++
。
让我们来看一个栗子:
1 | var a = 1, |
先下结论:
- 不管是前置还是后置,递增/递减操作最后都会改变当前这个变量的值,只是什么时候改变的问题
- 前置操作:变量的值是在其所在的整个语句执行前改变的
- 后置操作:变量的值是在其所在的整个语句执行后改变的
这样,问题的关键就是怎么理解变量所在的整个语句了。
上面的例子中,a变量所在的整个语句就是console.log(a++);
,就是说问题的关键就是看变量的改变是在打印变量a之前改变还是在变量a之后改变
我们把上面的例子等价转换一下:
1 | var a = 1, |
可以看到前置操作是在变量改变之后再执行的打印变量操作,打印的结果自然是变量递增之后的值
后置操作是先打印了变量,然后变量的值才改变的,打印的结果自然是变量改变前的值。
再看一下书上的栗子:
1 | var num1 = 2; |
1 | var num1 = 2; |
上面的例子分别等价于:
1 | var num1 = 2; |
1 | var num1 = 2; |
观察上面的等价处理后的示例代码,其实不同之处就是这一句num1 = num1 - 1;
的执行位置不同而已,其它代码完全相同。这个时候再看前面下的结论是不是就更清晰了呢:
- 前置操作:变量的值是在其所在的整个语句执行前改变的
- 后置操作:变量的值是在其所在的整个语句执行后改变的
拜了个拜~