我有一个可能的简单问题,我需要帮助。未定义jquery函数 - 范围问题?
我有两个js文件,我已经通过html中的标签加载到页面上。这两个文件中的所有代码都在$(document).ready();
内执行/加载
在某个事件上,第一个文件中定义的函数A试图调用另一个文件中定义的函数B.然而,这失败了,我得到一个错误,没有定义函数B.
我注意到,如果我在$(document).ready()
之外定义了函数B,那么函数A可以调用函数B--它在范围之内。
为什么?
我有一个可能的简单问题,我需要帮助。未定义jquery函数 - 范围问题?
我有两个js文件,我已经通过html中的标签加载到页面上。这两个文件中的所有代码都在$(document).ready();
内执行/加载
在某个事件上,第一个文件中定义的函数A试图调用另一个文件中定义的函数B.然而,这失败了,我得到一个错误,没有定义函数B.
我注意到,如果我在$(document).ready()
之外定义了函数B,那么函数A可以调用函数B--它在范围之内。
为什么?
这是一个范围问题。在函数中定义的所有东西只能在该函数中使用,除非以其他方式全局化。当您将该功能移到就绪功能之外时,它将变得全球化,从而使其可以全球访问。
编辑:当我说“在一些其他的方式进行全球性的”,我的意思是这样的:
window.something = "something";
即使这行代码你准备函数中存在这将创建一个全局变量something
。
谢谢詹姆斯。对于JQuery来说是新的,并且认为.ready中的任何东西都会神奇地具有全局范围。 – gdbj 2011-12-30 04:10:47
是的,范围问题。 JavaScript有函数作用域,所以你在document.ready中创建的函数只能在该函数内部访问***,除非你通过将函数附加到全局对象('window'对于浏览器)。但这不是正确的解决方案 - 我相信有比这更好的解决方案。 – Anurag 2011-12-30 03:33:23
哈哈......当然。现在看起来很明显。第二个文件具有我已经做出不可知的功能,因此它们可以是全局的。我的印象是在ready回调中运行的代码将是全局的。谢谢。 – gdbj 2011-12-30 04:08:48