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 に答える