Javascript – 值存在,然后消失,然后再次出现?

这让我疯了。 我也无法通过Firebug来解决这个问题。 有人可以解释一下这里发生了什么吗?

基本上我有一个传入的文本文件,其中每行包含一个管道分隔的记录。 我将它们拆分为一个字符串数组数组,以便以后在自动完成文本框中使用。 代码如下:

 $(function () { var rawData = new Array(); $.get("/sample.txt", function (data) { var raw = data.split('\n'); for (var i = 0; i < raw.length; i++) { rawData.push(raw[i].split('|')); }; alert(rawData); // 1st sanity check } ); alert(rawData); // 2nd sanity check alert(rawData); // 3rd sanity check 

由于某种原因,第一次完整性检查工作正常 – 它显示我所期望的所有数据。 第二个显示rawData为空…但第三个显示所有数据。 删除第1次完整性检查不会影响第2次和第3次。

这怎么可能? 为什么会这样? 这真让我抓狂。

您忘记了get()函数是一个异步函数。 您在内部定义的回调只会在加载文件后被调用。 本质上,JavaScript解释器将其放入队列中,以便在操作完成时准备好,然后允许其余代码执行。

因此,回调中的警报将反映文件已加载的事实。 外部警报将在加载该文件之前执行。 当然,您个人等待解除第二个警报的时间越长,加载所有数据时第三个警报执行的更改就越好。