Javascript 已修复移除函数括号的最大调用堆栈大小

Javascript maximum call stack size exceeded fixed from removing function brackets

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

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, 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;
};

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

在你的第一个例子中,函数没有 return 任何东西,所以它会一直运行下去,而在你的第二个例子中,函数做了 return 东西。

在第一个代码块中:

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

您的函数没有 return 任何值。您可以通过添加 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; }