Оптимизация хвостового вызова в JavaScript не работает

1

Ecmascript6 представил оптимизацию хвостовых вызовов (TCO), я написал следующий код

'use strict';
var isStrict = (function() { return !this; })();
function add5(a,total=0){
    if(a==1)return total+a;
    return add5(a-1,total+a);
}

add5(100000); 

и запускать его как в хромированном виде (57.0.2987.133 (64-бит))

<script src="strict.js"></script>

и узел (v8.1.0). все они печатают результат:

isStrict:true
/data/study/dashboards/api-demo/strict.js:4
function add5(a,total=0){
             ^

RangeError: Maximum call stack size exceeded
    at add5 (/data/study/dashboards/api-demo/strict.js:4:14)
    at add5 (/data/study/dashboards/api-demo/strict.js:6:12)
    at add5 (/data/study/dashboards/api-demo/strict.js:6:12)
    at add5 (/data/study/dashboards/api-demo/strict.js:6:12)
    at add5 (/data/study/dashboards/api-demo/strict.js:6:12)
    at add5 (/data/study/dashboards/api-demo/strict.js:6:12)
    at add5 (/data/study/dashboards/api-demo/strict.js:6:12)
    at add5 (/data/study/dashboards/api-demo/strict.js:6:12)
    at add5 (/data/study/dashboards/api-demo/strict.js:6:12)
    at add5 (/data/study/dashboards/api-demo/strict.js:6:12)

Кажется, что строгий режим включен, но оптимизация хвостового звонка не работает, кто-нибудь может оказать мне услугу и сказать почему?

Теги:

2 ответа

0

Кажется, что v8.1.0 поддерживает TCO согласно http://node.green/ node с версией v7.10.x, v7.5.x, v6.11.x, возможно, работает, и он работает в разделе v7.10.0 с [ CN00], как я и пытался.

0

Он работает только в узле с --harmony_tailcalls даже в версии 8.1.0.

function addFive(a, total){
  'use strict';
  if(a < 1) return total;
  return addFive(a-1, total+a);
}

addFive(100000, 0);
  • 0
    спасибо, узел --v8-options | grep 'harmony', TCO является функцией 'in process' в узле v8.1.0

Ещё вопросы

Сообщество Overcoder
Наверх
Меню