什么时候在JavaScript函数结束时添加一个返回?

时间:2012-10-03 13:37:21

标签: javascript jquery

我见过一些开发人员在他们的JavaScript函数结束时返回一个返回:

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

甚至有必要返回?我知道return false提前取消了循环,我知道return x,返回一个值,但刚刚返回???这是什么意思?

抱歉 - 我忘了在代码的最后结束}。返回在if条件中。


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

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

  

我们可以在特定的迭代中打破$ .each()循环   回调函数返回false。返回非假是与a相同   在for循环中继续声明;它将立即跳到下一个   迭代。

所以你有它,返回除false之外的任何其他内容没有任何区别,它将继续进行下一次迭代。然而,false打破了循环。

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

答案 2 :(得分:1)

这只是结束函数执行的一种方法,无需选择合适的返回值。在功能结束时,它确实没有什么区别。

答案 3 :(得分:1)

就像return false一样,它会在早期取消阻止(在本例中为函数)。返回值为undefined

在函数结束时,它完全等同于不使用return语句,但是你的示例对我来说看起来不像函数的结尾。

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

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

答案 4 :(得分:1)

问题是你的开始和结束{ }大括号没有对齐,所以根据哪个是正确的,这将有不同的表现。如果if的右括号在返回之后,那么这将在常规for循环中表现为continue

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

事实证明,for循环结束时的continue也是隐含的,所以这并不是真正有用的目的。

当然,如果你的问题更具理论性,答案是通常它没有什么作用:

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

这里,即使没有return的直接调用,该方法也会隐式返回,因为它位于代码块的末尾;在某些情况下,它可以作为指示你在函数的末尾,特别是如果有很多嵌套。如果不是在底部,那肯定会产生影响,因为return;之后不会执行任何操作。否则,差异纯粹是风格。保存几个字符,让它离开当然!

答案 5 :(得分:1)

回归的行为;函数中的任何地方都与代码到达函数末尾时完全相同,调用者接收到undefined。

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

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