[英]javascript array reference and callback function
我不了解的内容我想解释很久了,所以请多多包涵。 我的页面中包含以下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
})();
然后从页面中进行以下调用(假设some_url有效)
var array = include.test(some_url);
稍后我有一个事件(单击某些按钮)将使用数组中的值
input.on('click',function(){
console.log(array) // 2
});
我的问题是,当事件发生时,数组变量仍然是VOID,console.log // 2显示Array [] ....
我知道我的测试函数会立即返回,因此数组变量的立即值是Array [],但是到input.click被调用时,then()回调将已经执行,因此应该修改数组本身。数组是一个参考...
有什么建议吗? 我通常不问问题,因为大多数时候我都是通过搜索找到答案的,但是我已经尝试了一天。 也许我缺乏灵感。 一些帮助将不胜感激
array
指向一个空数组,但是在ajax回调中,您有result = data.form.records;
这将为result
分配一个新数组, result
不是更新由array引用的array
,这就是为什么即使在控制台记录了result
数组的正确值后,它仍指向初始空数组的原因。
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
})();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.