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函数表达式中删除了大括号。这不就是语法上的糖吗?有人能解释一下为什么仅仅使用大括号就超过了最大调用堆栈大小吗?谢谢

在第一个代码块中:

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

在第一个示例中,函数不返回任何内容,因此它将永远运行,而在第二个示例中函数确实返回了一些内容。