"Maximum call stack size exceeded"
というエラーに関する解説を書きます。JavaScript を前提に解説しております。
Uncaught RangeError: Maximum call stack size exceeded
これは、関数が何度も深く深く呼ばれてしまった場合に出るエラーです。
大抵は、間違って自分自身の関数を呼んでしまった、もしくは再帰の終了条件をミスった場合に発生します。 ここに検索で来た方は、自分自身を呼んでいたり、関数同士が循環的に呼びあっていたりするミスを犯していないか確認してください 。
図にすると、こんな感じです
ちなみに、関数呼び出しがなければこのエラーは発生しません。ただの無限ループでは決して発生しないエラーです。以下、解説を書きます。
先日、次のような Tweet を見かけました
TIL I discovered that TensorFlow.js uses an interesting trick to sniff your CPU architecture in WebAssembly. pic.twitter.com/LVyywIM48I
— Robert Knight (@robknight_) January 4, 2023
面白かったので、なぜこうなるのかの解説と、ついでにこのテクニックを使った JIT 検知方法などについて紹介します。
2023 年、あけましておめでとうございます!私は元旦に次のようなオリジナル・パズルを出しました。
上の例のように、数字の合間に四則演算(+−×÷)や括弧を入れることで、2023 を作ってください。
オリジナルツイートはこちらです。この記事では、JavaScript によるこのクイズの解き方をご紹介します。
setTimeout
は、指定された時間以降に指定されたコードを実行する JavaScript の API です。ブラウザでも Node.js でも広く使われているのですが、実装はまちまちで、色々と特殊な条件も多く、挙動を完璧に理解している人は少ないと思います。この記事では、そんな setTimeout
を可能な限り深堀りしてみようと思います。
先に書いておきますが、ものすごくニッチで細かい話ばかり並びます。突然私が、ただ純粋に setTimeout
について調べたくなったので、その結果をまとめただけのものです。普通に開発している人には必要のない情報が多くなるでしょう。この記事は基礎から setTimeout
を学ぼう、という方には全然向かないと思います。
また、JavaScript のイベントループについてある程度理解していることを前提とします。その詳しい理解には、@PADAone さんの書かれた「イベントループとプロミスチェーンで学ぶJavaScriptの非同期処理」という本の中の「それぞれのイベントループ」を読んで頂けると良いかと思います。
JavaScript を書いたことがある人ならば一度は使うであろう console.log
ですが、この関数は思ったよりも厄介な性質を持っています。その性質を知らずに console.log
を使うと、デバッグ時に大ハマリしてしまうことがあります。この記事では console.log
の落とし穴についてお話します。
今回は Chrome に特化して解説しますが、Firefox や Safari でも同じ落とし穴があります。