当我在函数中为其赋值时,全局变量不会更新

时间:2017-03-10 19:39:16

标签: javascript jquery arrays global-variables

我正在尝试使用jQuery在.txt文件中创建一个基于行的数组。该数组是游戏的答案列表。

控制台第一次记录带有内容的数组,但第二次记录一个空数组。为什么answers不能全局更新?

这是我的代码:

//create global variable answers
var answers = new Array;
//assign a value to answers from text file
$.get("wordsEn.txt", function(txt){
    answers = txt.split('\n');
    console.log(answers);
});
console.log(answers);

3 个答案:

答案 0 :(得分:0)

回调之外的console.log(answers);在分配之前发生

$.get会立即返回,但它的回调肯定不会马上开始;获取数据可能需要一段时间。在此期间,外部console.log(answers);运行。

答案 1 :(得分:0)

你需要调用一个函数来支持像

这样的同步函数
    //create global variable answers
var answers = new Array;
var cb = function(){
    console.log(answers);
};
//assign a value to answers from text file
$.get("wordsEn.txt", function(txt){
    answers = txt.split('\n');
    console.log(answers);
    if(cb)
        cb();
});

答案 2 :(得分:0)

你有两次调用console.log,所以有一个问题是你无法知道哪一个先发生,因为一个是同步发生而另一个是异步发生的。对于初学者,如果您正在进行此类调试,则应在日志语句中添加一些其他信息:

console.log('1: ' + answers);
console.log('2: ' + answers);

当你看到输出时,你会知道2是先发生了,还是先发生了1次。

就像其他人所说的那样,$.get代码中使用的内部函数是异步发生的,这意味着它会在 ajax请求完成后运行,这有时可能很快或很慢,你无法知道。