0

我正在使用 jQuery 并在从头部调用的外部 Javascript 文件中,我有这个:

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

在页面底部,我使用 document.ready 开始了一个新部分,但是localDb变量和updateLocalStorage函数都不可访问。

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

我收到一条错误消息,提示“未捕获的 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 回答