小编she*_*dog的帖子

无法在节点v6.4.0中启用尾调用优化

我不想在node/es2015中使用尾调用优化,但我一直在努力RangeError: Maximum call stack size exceeded.所以我尝试了一个非常简单的测试功能:

  function countTo(n, acc) {
    if(n === 0) {
      return acc;
    }
    return countTo(n - 1, acc + n);
  }

  console.log(countTo(100000 , 0))
Run Code Online (Sandbox Code Playgroud)

它仍然失败.我已经尝试'use strict';在函数体内添加并在文件的顶部.我尝试过使用--harmony--harmony-tailcalls

相同的功能在球拍中按预期工作:

#lang racket
(define count-to
  (lambda (n acc)
    (cond
      ((= n 0) acc)
      (else (count-to (- n 1) (+ acc n))))))
(count-to 100000000 0)
; ~> 5000000050000000
Run Code Online (Sandbox Code Playgroud)

编辑:

正如@MatthieuLemoine建议的那样.它适用于v6.5.0 +和"use strict";,或者--harmony或者--harmony-tailcalls

javascript recursion node.js ecmascript-6

6
推荐指数
1
解决办法
276
查看次数

标签 统计

ecmascript-6 ×1

javascript ×1

node.js ×1

recursion ×1