4

我看到一些开发人员在他们的 JavaScript 函数的末尾放置了一个 return,如下所示:

$(".items").each(function(){
    mthis = $(this);
    var xposition = some .x() position value;
    if(xposition < 0){
        mthis.remove();
        return;
    }
});

还需要退货吗?我知道return false提前取消了循环,我知道return x,返回一个值,但是刚刚返回???这意味着什么?

抱歉 - 我忘了在代码的最后加上 end }。返回是在 if 条件下。


新更新 - 刚刚发现循环的目的是取消进入循环的第 n 个 .item。所以 return false 是我对简单 return 的替代;(这意味着无论如何都是未定义的)。感谢大家的帮助!

4

6 回答 6

3

在函数结束时返回而不继续它并没有真正做任何事情。然而,返回“this”允许方法链接。

于 2012-10-03T13:42:24.343 回答
2

您的示例特定于如何jQuery.each处理循环函数的返回值。从文档:

通过使回调函数返回 false,我们可以在特定迭代中打破 $.each() 循环。返回非 false 与 for 循环中的 continue 语句相同;它将立即跳到下一次迭代。

所以你有了它,返回任何东西都false没有区别,它只会继续下一次迭代。false,但是,打破了循环。

请注意,return;与 完全相同return undefined;

于 2012-10-03T13:46:51.577 回答
1

问题是你的开括号和闭{ }括号没有对齐,所以根据哪个是正确的,这会有所不同。如果 if 的右大括号在 return 之后,那么这将像continue常规 for 循环中的 a 一样。

$(".items").each(function(){
    mthis = $(this);
    var xposition = some .x() position value;
    if (xposition < 0) {
        mthis.remove();
        return;
    }
}

事实证明,continuefor 循环末尾的 a 也是隐式的,所以这并没有真正起到作用。

当然,如果您的问题更具理论性,答案是通常它不会产生影响:

function doSomething() {
    alert("Hello, world");
    return; //purely a matter of preference
}

return在这里,由于位于代码块的末尾,即使没有直接调用 ,该方法也会隐式返回;在某些情况下,它可以用作指示您处于函数末尾的指示符,特别是在有很多嵌套的情况下。如果不是在底部,那肯定会有所作为,因为之后return;不会执行任何操作。否则,差异纯粹是风格上的。为您节省了几个字符,当然可以将其排除在外!

于 2012-10-03T13:51:37.217 回答
1

退货行为;函数中的任何地方都与代码到达函数末尾时完全相同,调用者收到未定义。

在该代码中,它与条件一起使用。我不得不假设您没有显示完整的代码。

此方法通常用于在不满足前提条件时跳转到函数的末尾,因为它可能比五个缩进更具可读性,每个缩进都有另一个条件。

于 2012-10-03T13:52:21.003 回答
1

这只是一种结束函数执行的方法,而不必选择适当的返回值。在函数结束时,它真的没有什么区别。

于 2012-10-03T13:39:42.367 回答
1

就像return false,它会提前取消块(在本例中为函数)。返回值将是undefined.

在函数的末尾,它相当于根本不使用 return 语句,但是您的示例在我看来不像函数的结尾。

编辑:只是为了让它更清楚一点:这个特定的 return 语句位于周围if子句的末尾,而不是整个函数。换句话说,if子句的条件指定了函数应该中途终止的情况。

编辑2:通过“函数”,我指的是内部的匿名函数。return;, 等价于return undefined;, 确实会导致jQuery.each()继续下一项。(此外,我似乎误认为函数中有更多代码;鉴于 OP 对代码示例的编辑,它确实看起来像一个毫无意义的返回语句。)

于 2012-10-03T13:42:22.673 回答