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; }
当我尝试 运行 下面的代码时 :
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; }