3

代码示例:

 <script>
      var data = new Array();
      data[0] = 'hi';
      data[1] = 'bye';
 </script>

 <script>
      alert(data[0]);
 </script>

这给出了以下错误:data is not defined

你怎么做这样的事情?特别是如果第一个<script>块正在通过 ajax 加载到页面上,而第二个块正在使用它。jQuery 解决方案是可以接受的。

4

4 回答 4

8

New不是关键字。

采用:

var data = new Array();

或者,更简洁地说:

var data = [];

编辑后,您提到第一个脚本块是异步加载的。你的代码不会像写的那样工作。data是一个全局变量,一旦加载到页面上。您需要使用回调模式来正确执行代码。

由于您尚未发布异步代码,因此我不打算提供callback示例。不过,一个快速的解决方案如下:

var interval = setInterval(function(){
    if(data) {
        /* ... use data ... */
        clearInterval(interval);
    }
}, 500);
于 2012-04-09T17:10:34.740 回答
3

要创建全局变量,只需从语句中省略 'var'。当您省略“var”时,实际上是在窗口命名空间中创建变量。

所以,zz = 1其实是window.zz = 1

如果你真的想,你可以明确地说

window.data = new Array(); //remember that new should be lowercase.

但是你无论如何都可以通过说更快地写出来

data = ['hi','bye'];
alert(data);
于 2012-04-09T17:14:37.690 回答
0

如果你使用 jQuery,也许你应该尝试.getScript()而不是使用.html();

// in separate file

data[0] = 'hi';
data[1] = 'bye';


// in main file

var data = [];

$.getScript(url).done(function() {
    alert(data[0]);
}).fail(function() {
    // handle error
});  
于 2012-04-09T17:26:36.787 回答
0
<script>
       data = [];
      data[0] = 'hi';
      data[1] = 'bye';
 </script>

 <script>
      alert(data[0]);
 </script>

使用它,删除 var 使变量成为全局变量

于 2020-08-20T08:19:27.417 回答