2011-12-30 66 views
4

我有一个可能的简单问题,我需要帮助。未定义jquery函数 - 范围问题?

我有两个js文件,我已经通过html中的标签加载到页面上。这两个文件中的所有代码都在$(document).ready();内执行/加载

在某个事件上,第一个文件中定义的函数A试图调用另一个文件中定义的函数B.然而,这失败了,我得到一个错误,没有定义函数B.

我注意到,如果我在$(document).ready()之外定义了函数B,那么函数A可以调用函数B--它在范围之内。

为什么?

+2

是的,范围问题。 JavaScript有函数作用域,所以你在document.ready中创建的函数只能在该函数内部访问***,除非你通过将函数附加到全局对象('window'对于浏览器)。但这不是正确的解决方案 - 我相信有比这更好的解决方案。 – Anurag 2011-12-30 03:33:23

+0

哈哈......当然。现在看起来很明显。第二个文件具有我已经做出不可知的功能,因此它们可以是全局的。我的印象是在ready回调中运行的代码将是全局的。谢谢。 – gdbj 2011-12-30 04:08:48

回答

3

这是一个范围问题。在函数中定义的所有东西只能在该函数中使用,除非以其他方式全局化。当您将该功能移到就绪功能之外时,它将变得全球化,从而使其可以全球访问。

编辑:当我说“在一些其他的方式进行全球性的”,我的意思是这样的:

window.something = "something"; 

即使这行代码你准备函数中存在这将创建一个全局变量something

+0

谢谢詹姆斯。对于JQuery来说是新的,并且认为.ready中的任何东西都会神奇地具有全局范围。 – gdbj 2011-12-30 04:10:47