javascript - 使用一个函数来改变条件内的东西,使条件依赖于顺序,这是不好的做法吗?

标签 javascript function variables if-statement conditional

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/

相关文章:

python - 使用 lambdify 将硬积分转换为 lambda 函数

c# - 将时间四舍五入到最接近的小时

variables - Go中的变量初始化

javascript - 你能在 vue.js 中更改项目的 ID 吗?

javascript - 计算字符串中的重复符号并使用 Javascript 对它们进行分组

javascript - 页面变化时检查dom中是否存在元素

python - 如何在 Linux 终端上运行带有输入的 python 代码?

function - 没有名为 'psycopg2._psycopg' 的模块

c - 检查变量是否为某物值的方法

javascript - AJAX 调用在 ASP.NET MV3 项目中返回内部服务器错误