Javascript全局变量不工作

Javascript global variable not working

本文关键字:工作 全局变量 Javascript      更新时间:2023-09-26

我在这里看到了这个问题的几个版本,但似乎没有一个和我的问题相同,所以我想我应该创建一个新的问题。我一定是做了什么傻事,可是我怎么也看不出来。

我将从上下文开始,虽然它不是特别相关:我推迟jQuery与js代码的加载,这意味着我的代码文件都不能包含$(document).ready(...)调用,因为"$"将在第一次传递时未定义。相反,我将准备好的函数添加到一个"全局"数组中,在jQuery异步加载后,我用以下命令调用所有这些函数:

function FireLoadEvents() {
  while ( OnLoadEvents.length > 0 ) {
    var item = OnLoadEvents.splice(0,1);
    item[0].ready();
  }
}

现在,在我的任何页面组件中,我可以使用以下代码添加一个事件,我希望在jQuery加载并且文档实际准备好时触发:

OnLoadEvents.push( { ready: function() { ... } } );

我已经在模板的顶部定义了OnLoadEvents变量:

<script language="text/javascript">
var OnLoadEvents = new Array();
</script>

可以看到,它在任何函数作用域之外,并且在引用之前声明。当测试自己的时候,这个设置工作得很好,但是由于某种原因,当它被添加到我的实际页头时,在页面后面的脚本标签不能将项目添加到OnLoadEvents变量。例如,php-include服务器端将以下内容拉入我的模板,并将这些行添加到我的页面主体中:

<script type='text/javascript'>
OnLoadEvents.push( { ready: function() {
  if ( $('.sponsor-link').length != 0 ) {
    ... 
  }
} } );
</script>

当我在Chrome中点击此页面时,它报告上面的"push"行上出现以下异常:

Uncaught ReferenceError: OnLoadEvents is not defined

知道是怎么回事吗?为什么onloaddevents在我初始化它的几行之后是未定义的?我要注意的是,我还尝试将OnLoadEvents定义为window.OnLoadEvents并将其引用。

提前感谢!

修改如下:

<script language="text/javascript">

:

<script>

浏览器无法识别language属性的值,因此不执行该代码。

现场演示: http://jsfiddle.net/gyhcM/2/

您不需要language属性,也不需要type属性,因为web浏览器默认使用JavaScript。