gpt4 book ai didi

javascript - 为什么 while 循环中的这个条件会像循环体的一部分一样被执行?

转载 作者:行者123 更新时间:2023-12-02 15:41:57 24 4
gpt4 key购买 nike

相关函数如下(此示例取自 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-- 时那样将任何内容分配回 xx--;x = x - 1; 完全相同。碰巧它也返回了赋值之前x的值;这样它就可以用作条件。这就像从一个变量中读取数据,然后在一个语句中将其全部写入。

关于javascript - 为什么 while 循环中的这个条件会像循环体的一部分一样被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com