已定义的功能无法访问

时间:2011-04-18 16:55:19

标签: jquery document-ready

我正在使用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 个答案:

答案 0 :(得分:3)

您将updateLocalStorage定义为只能从该ready处理程序访问的本地内部函数。还有局部变量localDb的情况。

如果您在$(document).ready()调用之外定义函数和变量,它将正常工作;

答案 1 :(得分:0)

为什么不这样做:

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

答案 2 :(得分:0)

这是因为你在一个匿名函数中包装一个函数,因此它只在该范围内可用,你应该做的是将函数导出到全局范围,如下所示:

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

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

    window.updateLocalStorage = updateLocalStorage;
});

您不需要将文档中的函数包装好,控制全局范围的更好方法是自调用匿名函数来执行所需的代码。

(function(){

    var updateLocalStorage = function()
    {
    }

    $(document).ready(updateLocalStorage);

})();

答案 3 :(得分:0)

你最好使用

var updateLocalStorage;

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

然后在你的函数中使用它。