0

以下は、で実行される私のJavascriptドキュメント$(document).ready()です。Javascriptは私のサイトのフッターからロードされます。簡略化のために[...]、無関係なコードの代わりに使用しました。

// When the document is ready, run the display scripts
$(document).ready(function() {

// Define the frame height functions
function getDocHeight(doc) {
    [...]
}
document.domain = 'mysite.com';

function resizeIframe() {setIframeHeight('date-price-book');}

function setIframeHeight(ifrm) {
    [...]
}

function AutoResize() {
    resizeIframe();
    resizeIframe();
    setTimeout("AutoResize()", 500);
}

AutoResize();

[... more Javascript code...]

ページを実行すると、次のエラーが発生しますUncaught ReferenceError: AutoResize() is not defined

AutoResize();行(上記のサンプルコードの最後の行)をコメントアウトすることで、このエラーの発生を防ぐことができます。しかし、なぜこのエラーがスローされるのですか?確かに、AutoResize()関数はそのすぐ上の行で定義されていますか?

ご協力いただきありがとうございます!

4

3 に答える 3

3
setTimeout("AutoResize()", 500);

上記の setTimeout が実行されると、グローバル スコープで文字列が評価されます。AutoResize() はクロージャー内に隠されているため、見つかりません。

名前を使用して関数への参照を割り当てます。

setTimeout(AutoResize, 500);

他のオプションは閉鎖です

setTimeout(function() { AutoResize(); }, 500);

関数にパラメーターを送信する場合は、クロージャー メソッドを使用します。

于 2012-08-02T19:10:19.297 に答える
1

AutoResizeクロージャー内で定義しているため$(document).ready(function () { ... } );、グローバルに使用することはできません (これは素晴らしいことです)。

呼び出し時に関数参照の代わりに文字列を使用する場合setTimeout(これは悪いことです)、文字列が解決される関数呼び出しがグローバルに利用可能であるという前提があります ( /global スコープsetTimeoutで実行されるため)。window

于 2012-08-02T19:10:37.550 に答える
-1

わからない。この部分を試してみるとうまくいきます。

function AutoResize(){      
    console.log('test');
    setTimeout('AutoResize()',1000);
}
AutoResize();

たぶん、何かがうまくいかないのは別の場所です。

于 2012-08-02T19:20:00.427 に答える