我见过一些开发人员在他们的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是我取代简单的回报; (无论如何,这意味着未定义)。谢谢大家的帮助!
答案 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。
在该代码中,它与条件一起使用。我不得不假设你没有显示完整的代码。
当不满足前提条件时,此方法经常用于跳转到函数的末尾,因为它可能比五个缩进更易读,每个缩进都有另一个条件。