【问题标题】:How to exit in the middle of a function? [closed]如何在函数中间退出? [关闭]
【发布时间】:2016-08-25 15:06:41
【问题描述】:

嵌套if怎么样?

$scope.addToCart = function () {
    if (flagA) {
        if (flagB) {
            if (flagC) {
                alert('nononono!');
                return;
            }
        }
    }
    someAnotherFunction();
};

我有一个函数:

$scope.addToCart = function () {
    var foo = 5;
    if (someFlag == 'Y') {
        alert('warning!');
        return;
    }
    someAnotherFunction();
};

我在某处调用这个函数

ng-click = "addToCart()"

如果

,我的意图是退出这个功能
someFlag == 'Y'

然后不执行

someAnotherFunction();

但它仍然执行它。

WebStorm 告诉我这个return 是不必要的,所以可以安全地删除它。

【问题讨论】:

  • if (someFlag == 'Y') { 条件必须失败。你警觉了吗?
  • 当代码依赖全局变量时,通常会发生意外行为。
  • @untmat this 回答说 break 可以退出循环而不是函数。
  • 当前答案建议使用else 块。虽然这可能会解决您的问题,但首先执行 return 语句之后的任何内容都是不可能的。您应该弄清楚代码的实际问题是什么,而不是解决它。
  • 更可能是$scope.addToCart() 函数被再次调用(在someFlag 更改之后),或者someAnotherFunction() 被从其他地方调用,而不是@987654334 @ 语句没有在alert() 之后立即执行。

标签: javascript angularjs function


【解决方案1】:

如果你确定 if 条件满足,但 return 不起作用,那么你也可以尝试将someAnotherFunction(); 放入 else:

if (someFlag == 'Y') {
    alert('warning!');
    return;
}
else {
    someAnotherFunction();
}

这样someAnotherFunction() 只有在 if 块不存在的情况下才能执行。

附录

原始代码应该可以工作,这只是一种解决方法,正如评论中指出的那样。然而,这两种方法在理论上都达到了相同的目标。

如需了解更多详情,请查看this question - 了解差异详情。

【讨论】:

  • if 不是循环。虽然这是一个很好的解决方法,但原始代码应该可以正常工作。
  • 我的意思是块,而不是循环,干杯。
【解决方案2】:

您可以将调用放在 else 块中的另一个函数:

$scope.addToCart = function () {
    var foo = 5;
    if (someFlag == 'Y') {
        alert('warning!');
        return;
    } else {
      someAnotherFunction();
    }

};

这应该会让您更了解发生了什么

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2016-02-17
    • 1970-01-01
    • 2013-08-05
    相关资源
    最近更新 更多