2009-08-24 57 views
2

只要我从jquery $()。ready()中调用我的javascript代码;函数不应该有权访问我的JavaScript代码中声明的所有变量?javascript的顺序在页面中是否重要?

我有来自.js文件和内联的代码。

我试图访问一个变量,它说它没有定义,但是当我做一个视图源时,我可以看到这个变量。

+0

请点击这里。有一个答案,这解释了很多http://stackoverflow.com/questions/7609276/javascript-function-order-why-does-it-matter – iveetoo 2013-08-23 12:15:28

回答

4

您不一定有权访问该变量。这实际上取决于变量的范围以及相对于其使用位置的地方。如果该变量是在单独的ready()块中定义的,则即使该变量在全局空间中,但如果该准备好的块在引用它的那个之后运行,也可能无法访问该变量。为了可用,定义变量的代码需要在引用它的代码之前执行,并且它需要位于相同的范围内。

+0

+1更多信息:http://docs.jquery.com/Events /就绪#FN – ATorras 2009-08-24 15:58:03

0

是的,你可以访问所有的顶级变量。但是你正在寻找的那个可能是使用dom ready事件定义的,即使它是一个窗口变量,处理程序可能会在你的后面被触发。或者它在动态注入的JavaScript文件中。

1

不,您应该总是按照需要的顺序加载Javascript。如果您使用的是一些jQuery插件,那么您应该在这些插件之前加载jQuery,因为它们可能会在您不知情的情况下实例化使用jQuery对象的某些内容。

对于我的web应用程序,我加载JavaScript的以下顺序:

  • 外部库(jQuery的,原型,ExtJS的)
  • 插件,建立过这些库的
  • 我定制的JavaScript

我希望我的回答很有帮助。

1

你是对的,访问其他文件中的变量应该没有问题。范围或简单的拼写错误可能存在问题。您尝试访问的变量的范围是什么,以及您尝试使用它的范围?

4

JavaScript的顺序确实很重要。 JavaScript是在页面内的线性方式执行,所以如果你有两个<script>标签是这样的:

<script src="test1.js"></script> 
<script src="test2.js"></script> 

test1.js将被加载并首先运行,然后test2.js。在test1.js中全局声明的任何内容都可以在第二个脚本中访问,但不能以其他方式访问。

这样做的副作用是,脚本也在加载时,如果test1.js花了很长的时间来加载,你会看到减慢页面加载时间。这就是为什么建议在页面底部放置任何不是必须的JavaScript,以便在JavaScript加载速度降低之前几乎整个事情都会显示出来。

在jquery中的“准备就绪”事件中,理论上你应该可以访问任何作为DOM一部分加载的东西,因为在DOM结构完全构建之前,这在技术上应该不会触发。

0

您可以在页面的任何部分设置变量值,但在函数代码之前将它们声明在页面的顶部会更容易。

Josh