1

这实际上是来自redux-thunk示例的代码:

function fetchSecretSauce() {
  return fetch('https://www.google.com/search?q=secret+sauce');
}

这是我正在使用的:

const fetch = () => {
    	return fetch('https://www.google.com/search?q=secret+sauce')
    }
    
    console.log(fetch())

如果你“运行代码片段”,你会得到错误:

未捕获的 RangeError:超出最大调用堆栈大小

我也尝试过不同的链接。

4

1 回答 1

2

您的小提琴不正确,不代表您从redux-thunk提供的示例。在他们的示例中,他们fetch使用名为fetchSecretSauce. 您所做的是声明了一个fetch调用函数fetch(您刚刚定义的函数)的函数,从而通过一遍又一遍地调用自身来创建无限循环。

JavaScript 引擎对调用的次数有限制。当达到这个限制时,JavaScript 引擎会这样认为:

我相信这将永远持续下去,所以我会阻止任何不好的事情发生并立即终止它。我也会给你这个描述性的信息:Uncaught RangeError: Maximum call stack size exceeded

您将在下面找到一个与您的示例完全相同但减去函数名称的示例。点击“运行代码片段”,您将看到相同的无限循环:

function infiniteLoop() {
  return infiniteLoop('https://www.google.com/search?q=secret+sauce');
}

console.log(foo());

完全按照他们在示例中所做的操作,并将包装函数重命名为完全不同的名称。随便起个名字就行,别起名字fetch

function searchGoogleForSecretSauce() {
  return fetch('https://www.google.com/search?q=secret+sauce');
}
于 2016-06-23T18:13:54.343 回答