javascript数组引用和回调函数

javascript数组引用和回调函数,javascript,arrays,reference,callback,Javascript,Arrays,Reference,Callback,我不懂的东西我觉得解释起来很长,所以请耐心听我说。我的页面中有以下incude js: var include = (function(){ var exports = {} var test = function(url){ var result = []; $.ajax(url).then(function(data){ result = data.form.records; // assume data.form.r

我不懂的东西我觉得解释起来很长,所以请耐心听我说。我的页面中有以下incude js:

var include = (function(){
    var exports = {}
    var test = function(url){
        var result = [];
        $.ajax(url).then(function(data){
            result = data.form.records;  // assume data.form.records valid
            console.log(result) // displays correctly Array [Object,Object] 
        });
        return result;
    }
    exports.test = test;
    return exports
})();
然后从页面上我进行以下调用(假设某个url有效)

稍后我有一个事件(一些按钮单击),它将使用数组中的值

input.on('click',function(){
   console.log(array) // 2
});
我的问题是,当事件发生时,数组变量仍然无效, console.log//2显示数组[]

我知道我的测试函数会立即返回,所以数组变量的立即值是array[],但是当调用input.click时,then()回调就已经执行了,所以应该修改数组本身。毕竟数组是一个引用


有什么建议吗?我通常不会问问题,因为大多数时候我是通过搜索找到答案的,但我已经试了一天了。也许我缺乏灵感。如果您能提供一些帮助,我们将不胜感激。

array
指的是一个空数组,但在ajax回调中,您有
result=data.form.records
结果
分配一个新数组,而不是更新
数组
引用的数组,这就是为什么即使在控制台记录了
结果
数组的正确值后,
数组仍引用初始空数组的原因

var include = (function() {
  var exports = {}
  var test = function(url) {
    var result = [];
    $.ajax(url).then(function(data) {
      result.length = 0;//remove existing items from the array
      result.push.apply(result, data.form.records);//copy the items from the records to the result array instead of assigning a new value
      console.log(result) // displays correctly Array [Object,Object] 
    });
    return result;
  }
  exports.test = test;
  return exports
})();

您需要在回调函数中设置数组(然后(…)是的,K3N是对的,AJAX是异步的,return是同步的,就像你编码它的方式一样,使用异步和同步都不起作用。只是想知道,如果要正确缩进代码并将分号放在下面是否真的那么难。我已经更改了引用,甚至没有注意到它…谢谢你给我展示result=data.form.records;是不是我的代码中有一个错误
var include = (function() {
  var exports = {}
  var test = function(url) {
    var result = [];
    $.ajax(url).then(function(data) {
      result.length = 0;//remove existing items from the array
      result.push.apply(result, data.form.records);//copy the items from the records to the result array instead of assigning a new value
      console.log(result) // displays correctly Array [Object,Object] 
    });
    return result;
  }
  exports.test = test;
  return exports
})();