如何在javascript中打破递归回调函数

时间:2016-03-31 18:54:02

标签: javascript

这里我传递了一个回调函数,该函数可以在运行时调用自身,并在每次调用时打印一个递增1的值。我希望它在某个值之后中断。我怎么能这样做?

我收到以下错误:

  

未捕获的SyntaxError:意外的令牌返回

<html>
<body>
   <script>
       function main(callback) {
           callback(3);
       }

       main(function(val) {
           console.log(val);
           val > 50 ?    return false: return true;
           arguments.callee(val + 1);
       });
   </script>    
</body>
</html>

3 个答案:

答案 0 :(得分:1)

你不能在三元运算符中return。即使它可以,你的递归也不会起作用,因为它总会在执行arguments.callee之前返回。此外,不建议使用arguments.callee,因为它会在严格模式下抛出错误。

function main(callback) {
  callback(3);
}
main(function redo(val) {
  console.log(val);
  if (val > 50) return;
  redo(val + 1);
});

答案 1 :(得分:0)

无论如何,你都会回来。

相反,如果不满足终止条件,则需要继续递归调用。类似的东西:

function main(callback) {
  callback(3);
}

main(function(val) {
  console.log(val);

  // if condition is met, quit
  if (val > 50) {
    return;
  }
  
  // else do recursive call
  arguments.callee(val + 1);
  
});

如果你想保留三元运算符,你也可以这样做:

val > 50? false : arguments.callee(val + 1);

答案 2 :(得分:0)

你的功能应该是这样的

main(function(val) { console.log(val); if( val < 50 ) arguments.callee(val + 1); });

遇到问题和错误

val > 50 ? return false: return true;

这行代码是错误的,必须使用三元运算符为变量赋值,而不是像可执行块一样使用它。

var flag = val > 50 ? false: true;

有效。