- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
相关函数如下(此示例取自 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--
并不是它工作所必需的。当我在开发工具控制台中运行它时,另一个类似的表达式似乎不会发生:
if (x - 2 == 5) { x-- }
这里好像是如果x是7那么x就会减1,不是如果x是7那么x就减2,然后x就会减1。但在上面的例子中num
,后者的原理才是生效的。
有人可以解释一下为什么吗?
最佳答案
因为每次计算表达式 num--
时(在循环的每次迭代中查看是否满足条件),它都会将 num
减少一。许多 JavaScript 专家会告诉你避免使用 num--
、num++
、--num
、++num
> 正是因为它们不那么直观的副作用。
我的建议是坚持使用乍一看更具可读性的内容,即使要输入更多字符。
while (num > 2) {
num = num - 1;
}
至少,仅将它们用作独立的语句,以明确它们正在做什么。
while (num > 2) {
num--;
}
在使用表达式 x - 2 == 5
的第二个示例中,该表达式根本不对 x
进行操作;它不会改变它的值(value)。您没有像执行 x--
时那样将任何内容分配回 x
。 x--;
与 x = x - 1;
完全相同。碰巧它也返回了赋值之前x
的值;这样它就可以用作条件。这就像从一个变量中读取数据,然后在一个语句中将其全部写入。
关于javascript - 为什么 while 循环中的这个条件会像循环体的一部分一样被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487260/
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!