簡體   English   中英

尾調用優化 (TCO) 在 Safari 中不起作用

[英]Tail call optimization (TCO) not working in Safari

根據ES6 兼容性表,Safari 具有尾調用優化功能。 試過了,它就像任何其他瀏覽器一樣失敗。 我錯過了什么嗎?

 function factorial(n, r = 1n) { return (n <= 1)? r: factorial(n - 1n, n * r) } console.log(factorial(36000n))

Safari output:

RangeError:超出最大調用堆棧大小。

您需要在嚴格模式下運行程序。

 "use strict"; function factorial(n, r = 1n) { return n <= 1n? r: factorial(n - 1n, n * r); } console.log(factorial(36000n).toString());

為了將 function 調用視為正確的尾調用,需要滿足四個條件。

  • 調用 function 處於嚴格模式
  • 調用 function 是正常的 function 或箭頭 function。
  • 調用 function 不是生成器 function。
  • 被調用 function 的返回值由調用 function 返回。

資料來源: Michael Saboff 的 ECMAScript 6 Proper Tail Calls in WebKit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM