0

私はjavascriptの初心者です。プログラムをデバッグするために firebug を使用していますが、「関数が定義されていません」というエラーが発生しました。オンラインで検索したところ、これは関数の構文エラーが原因であると言われました。しかし、その関数は非常に大きく、現在は firebug を使用できません (「定義されていません」というエラーしか表示されないため)。デバッグする良い方法はありますか? 使用するツールはありますか?ありがとう!

4

2 に答える 2

1

関数を定義するスクリプトの構文エラーが原因で、スクリプトが実行されず、関数が定義されていないことが原因である可能性がありますが、通常、タイプミスがあるとエラーが発生することがわかりました
例えば:

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]、非ネイティブ関数に表示されます)。しかし、そうではない可能性があります。)

于 2012-09-27T06:16:09.270 に答える
0

関数宣言を投稿できます。使用している可能性がありますfunction expression

関数式

var f = function({alert(1);});

関数ステートメント

function foo() {alert(2);}

関数を使用するとfunction expression、そのコード行が実行されるまで関数は存在しません。

関数はfunction statementコンパイル時に存在します。

もちろん、それはスコーピングの問題である可能性もありますが、コードなしでは見ることができません。

于 2012-09-27T06:17:34.123 に答える