Javascript的最大调用堆栈大小超出了移除功能括号的固定范围

问题描述

当我尝试在下面运行以下代码时:

var reverseWords = function(s) {
    s.reverse();
    const findEndWord = (index) => {
        s[index] === ' ' || index === s.length ? index : findEndWord(index + 1);
    } 
    
    const reverseWord = (left,right) => {
        if(left >= right) {
            return;
        } 
        const temp = s[left];
        s[left] = s[right];
        s[right] = temp;
        reverseWord(left + 1,right -1);   
    }
    // code to actually implement
    var index = 0;
    while(index < s.length) {
    const end = findEndWord(index);
    reverseWord(index,end -1);
    index = end + 1;
    }
    return s;
};

我得到“超出最大调用堆栈大小”的错误。

但是,当我运行以下代码时

var reverseWords = function(s) {
    s.reverse();
    const findEndWord = (index) => 
    s[index] === ' ' || index === s.length ? index : findEndWord(index + 1); 
    
    
    const reverseWord = (left,end -1);
    index = end + 1;
    }
    return s;
};

代码运行完美。这两段代码之间的唯一区别是,第一个函数表达式“ findEndWord”使用花括号,但是在第二段代码中,我从findEndWord函数表达式中删除了花括号。这不只是语法糖吗?有人可以解释为什么仅使用花括号就超出了最大调用堆栈大小吗?谢谢

解决方法

在第一个代码块中:

const findEndWord = (index) => {
    s[index] === ' ' || index === s.length ? index : findEndWord(index + 1);
} 

您的函数不返回任何值。您可以通过添加return来解决此问题:

const findEndWord = (index) => {
    return s[index] === ' ' || index === s.length ? index : findEndWord(index + 1);
} 

在第二个代码块上:

const findEndWord = (index) => 
s[index] === ' ' || index === s.length ? index : findEndWord(index + 1); 

箭头符号=>已完成任务。因此f = (x) => x*2等于f = (x) => { return x*2; }

,

在您的第一个示例中,该函数不返回任何内容,因此它将永远持续下去,而在您的第二个示例中,该函数确实返回了一些东西。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...