【发布时间】:2015-12-05 21:03:54
【问题描述】:
下面是相关函数(本例取自here):
function factorial (num) {
if (num < 0) {
return -1;
}
else if (num == 0) {
return 1;
}
var tmp = num;
while (num-- > 2) {
tmp = tmp * num;
}
return tmp;
}
console.log(factorial(8));
----> 40320
当我研究这个函数的工作原理时(并且对表达式 (num-- > 2) 中的运算符优先级感到困惑;感谢我在 MakerSquare 的导师 Edwin Calte 指出这一点),我注意到 num 变量甚至递减尽管这种递减是被规定为要执行的循环体的前提条件,并且它本身不是循环体的一部分。我可以理解为什么它会这样做,如果表达式改为:
while (num-- > 2) {
num--;
...}
在上面的例子中,第二个num-- 并不是它工作所必需的。当我在我的 devtools 控制台中运行它时,另一个类似的表达式是:
if (x - 2 == 5) { x-- }
这里,似乎如果 x 为 7,则 x 将减 1,不是如果 x 为 7,则从 x 中减去 2,然后 x 将减 1。但是在上面num的例子中,后一个原理才是生效的。
谁能解释一下原因?
【问题讨论】:
-
num--改变num的值
-
请记住,if/for/while 语句中的括号没有什么特别之处。它的评估与循环体中的代码相同。如果括号表达式返回的值是真值,则条件成功。甚至赋值也是表达式:
x = 1将返回值1。
标签: javascript while-loop conditional-statements