2016-03-31 27 views
1

這裏我傳遞了一個回調函數,它可以在運行時調用它自己,並在每次調用它時打印一個增加1的值。我希望它在某個值之後中斷。如何能去做?如何在javascript中打破遞歸回調函數

我收到以下錯誤:

Uncaught SyntaxError: Unexpected token return

<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> 
+1

會在功能'是arguments.callee(VAL + 1)'曾經被稱爲?您從上一行中的父函數返回。 –

+0

這是很好的舉止,選擇一個對你最有幫助的答案 – ochi

回答

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);

+0

謝謝,但是如果我做了這樣val> 50的話呢?return:arguments.callee(val + 1); –

+0

在這種情況下,你可以使用'val> 50? false:arguments.callee(val + 1);' - 在這種情況下,'return'子句在三元運算符下運行不佳 – ochi

+0

@ AL-zami根據您的意見更新了我的答案,thx – ochi

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;

是否有效。

+0

不,它會盡快停止作爲值是50 –

+0

大聲笑。是的,我在閱讀評論之前修復了它,即使這樣,它也不會是一個無限循環,因爲我的條件3> 50在第一次嘗試中會失敗,我的循環會停止 –

+0

true,刪除我的評論 – ochi

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); 
 
});