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)
Кажется, что строгий режим включен, но оптимизация хвостового звонка не работает, кто-нибудь может оказать мне услугу и сказать почему?
Кажется, что v8.1.0 поддерживает TCO согласно http://node.green/ node с версией v7.10.x, v7.5.x, v6.11.x, возможно, работает, и он работает в разделе v7.10.0 с [ CN00], как я и пытался.
Он работает только в узле с --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);