私はjavascriptの初心者です。プログラムをデバッグするために firebug を使用していますが、「関数が定義されていません」というエラーが発生しました。オンラインで検索したところ、これは関数の構文エラーが原因であると言われました。しかし、その関数は非常に大きく、現在は firebug を使用できません (「定義されていません」というエラーしか表示されないため)。デバッグする良い方法はありますか? 使用するツールはありますか?ありがとう!
2 に答える
関数を定義するスクリプトの構文エラーが原因で、スクリプトが実行されず、関数が定義されていないことが原因である可能性がありますが、通常、タイプミスがあるとエラーが発生することがわかりました。
例えば:
function doSomething() {
}
dosomething();
そこで、大文字にするのを忘れていましたs
。JavaScript は大文字と小文字を区別するため、その関数を見つけることができません。
これをデバッグするためにできることは、実際に呼び出している関数を見つけて、定義されている関数のリストと比較することです。グローバル関数のみを扱っている場合は、これを JavaScript コンソールに貼り付けて (必要に応じて改行を削除して)、定義したすべてのグローバル関数を表示できます。
for(var key in window) {
if(Object.prototype.hasOwnProperty.call(window, key)) {
if(typeof window[key] === 'function' &&
window[key].toString() !== '[object Function]' &&
window[key].toString().indexOf('[native code]') === -1) {
console.log(key);
}
}
}
(これは、場合によってはいくつかのリストに失敗します (たとえば[native code]
、非ネイティブ関数に表示されます)。しかし、そうではない可能性があります。)
関数宣言を投稿できます。使用している可能性がありますfunction expression
関数式
var f = function({alert(1);});
関数ステートメント
function foo() {alert(2);}
関数を使用するとfunction expression
、そのコード行が実行されるまで関数は存在しません。
関数はfunction statement
コンパイル時に存在します。
もちろん、それはスコーピングの問題である可能性もありますが、コードなしでは見ることができません。