var a = 1;
function myFunction() {
++a;
return true;
}
// Alert pops up.
if (myFunction() && a === 2) {
alert("Hello, world!");
}
// Alert does not pop up.
if (a === 3 && myFunction()) {
alert("Hello, universe!");
}
https://jsfiddle.net/3oda22e4/6/
myFunction
递增一个变量并返回一些东西。如果我在包含它递增的变量的 if
语句中使用这样的函数,则条件将取决于顺序。
这样做是好是坏,为什么?
最佳答案
无论您是否更改条件中使用的变量,条件都取决于顺序。您用作示例的两个 if 语句是不同的,并且无论您是否使用 myFunction() 都会有所不同。它们等同于:
if (myFunction()) {
if (a === 2) {
alert("Hello, world!")
}
}
// Alert does not pop up.
if (a === 3) {
if (myFunction()) {
alert("Hello, universe!")
}
}
在我看来,您代码中的错误做法不是您在条件内更改条件的操作数值,而是您的应用程序状态在一个甚至不接受此状态更改的函数内公开和操作变量作为参数。我们通常会尝试将函数与其范围之外的代码隔离开来,并使用它们的返回值来影响其余代码。全局变量在 90% 的情况下都是一个坏主意,并且随着您的代码库变得越来越大,它们往往会产生难以跟踪、调试和解决的问题。
关于javascript - 使用一个函数来改变条件内的东西,使条件依赖于顺序,这是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47860891/