0

私はjQueryを使用しており、頭から呼び出された外部Javascriptファイルには次のものがあります:

$(document).ready( function() {
    var localDb = null;
    function updateLocalStorage() {
        // localDb is set here
    }
} );

ページの下部で、document.ready を使用して新しいセクションを開始しますが、localDb変数にもupdateLocalStorage関数にもアクセスできません。

$(document).ready( function() {
    updateLocalStorage();
} );

「Uncaught ReferenceError: updateLocalStorage が定義されていません」というエラーが表示されます。なぜこれが起こっているのですか? また、以前に定義された関数にアクセスするにはどうすればよいですか?

4

4 に答える 4

3

その準備ができたハンドラーからのみアクセスできるローカル内部関数として updateLocalStorage を定義しています。ローカル変数 localDb の場合も同様です。

$(document).ready()呼び出しの外で関数と変数を定義するとうまくいきます。

于 2011-04-18T16:59:28.853 に答える
0

なぜそうしないのですか:

$(document).ready(updateLocalStorage());
function updateLocalStorage() { // localDb is set here     }
于 2011-04-18T16:59:37.293 に答える
0

これは、匿名関数内に関数をラップしているためです。したがって、そのスコープ内でのみ使用できます。次のように関数をグローバル スコープにエクスポートする必要があります。

$(document).ready( function() {
    var localDb = null;

    function updateLocalStorage(){
        // localDb is set here
    }

    window.updateLocalStorage = updateLocalStorage;
});

関数をドキュメント内にラップする必要はありません。グローバルスコープを制御するためのより良い方法は、必要なコードを実行するための自己呼び出し匿名関数です。

(function(){

    var updateLocalStorage = function()
    {
    }

    $(document).ready(updateLocalStorage);

})();
于 2011-04-18T17:00:01.690 に答える
0

を使用した方が良いでしょう

var updateLocalStorage;

$(document).ready( function() {
    var localDb = null;
    updateLocalStorage = function () {
        // localDb is set here
    }
} );

後で関数で使用します。

于 2011-04-18T17:01:22.687 に答える