2011-04-18 97 views
0

我使用jQuery和从头部称为外部JavaScript文件,我有这样的:功能是无法访问的

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

在页面的底部,我开始与文档的新节。就绪,但是localDb变量和updateLocalStorage函数都不可访问。

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

我得到一个错误说“未捕获的ReferenceError:未定义updateLocalStorage。”为什么会发生这种情况,以及如何访问先前定义的功能?

+0

您是否尝试设置一个$(document).ready函数?把你的定义放在ready函数之外,看看发生了什么 – Dave 2011-04-18 17:01:02

回答

3

您正在将updateLocalStorage定义为只能从该就绪处理程序访问的本地内部函数。也是局部变量localDb的情况。

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

0

为什么不只是做:

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

这是因为你的一个匿名函数内包装的功能,所以这只是该范围内的可用,你应该做的是功能导出到像这样在全球范围内:

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

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

    window.updateLocalStorage = updateLocalStorage; 
}); 

,你不应该需要准备一个文件包内的功能,更好的方法来控制全球范围内是自调用匿名函数来执行所需的代码。

(function(){ 

    var updateLocalStorage = function() 
    { 
    } 

    $(document).ready(updateLocalStorage); 

})(); 
+0

这里有两个问题:'global.updateLocalStorage ='会导致错误,因为全局是未定义的,我想你的意思是'window.updateLocalStorage ='。其次,没有匿名函数,该函数被命名为updateLocalStorage,它是一个内部函数,但不是匿名的。 – 2011-04-18 18:05:22

+0

是固定的,我最近编写的程序跟node.js一样疯狂,而且我有点困惑。 – RobertPitt 2011-04-18 19:25:23

0

你会更好使用

var updateLocalStorage; 

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

,然后在你的函数中用到它。