Уже определенная функция недоступна - PullRequest
0 голосов
/ 18 апреля 2011

Я использую 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 ]

3 голосов
/ 18 апреля 2011

Вы определяете updateLocalStorage как локальную внутреннюю функцию, которая доступна только из этого готового обработчика. Также случай с локальной переменной localDb.

Это будет нормально работать, если вы определите функцию и переменную вне вызова $(document).ready();

0 голосов
/ 18 апреля 2011

Вам будет лучше использовать

var updateLocalStorage;

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

, а затем использовать его в своей функции.

0 голосов
/ 18 апреля 2011

это потому, что вы заключаете функцию в анонимную функцию, поэтому она доступна только в этой области, то что вам нужно сделать, это экспортировать функцию в глобальную область следующим образом:

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

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

    window.updateLocalStorage = updateLocalStorage;
});

вам не следуетнеобходимо обернуть функции в готовый документ, лучший способ управления глобальной областью действия - это самозвонящая анонимная функция для выполнения требуемого кода.

(function(){

    var updateLocalStorage = function()
    {
    }

    $(document).ready(updateLocalStorage);

})();
0 голосов
/ 18 апреля 2011

Почему бы просто не сделать:

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