首页 > 解决方案 > 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, 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 函数表达式中删除了大括号。这不只是语法糖吗?有人可以解释为什么仅使用花括号就超过了最大调用堆栈大小吗?谢谢

标签: javascriptrecursionstackcall

解决方案


在第一个代码块中:

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


推荐阅读