先看一個場景
var arr = ["a","b","c"];
for (var i in arr) {
$.get("h.html", function (data) {//1
console.log(data);
console.log(arr[i]);
console.log("----");
});
}
我們期望的是
然而實際上是

如何達到實際目的呢?先給出解決方法,再慢慢解釋
使用閉包,或者簡單說,使用函數,根據作用域,控制好返回回調函數中數據的值
var arr = ["a","b","c"];
var b = 1000000000;
for (var i in arr) {
get(arr[i]);//使用閉包,使得每次請求返回某些想要的數據
}
function get(retur) {
$.get("h.html", function (data) {//2
console.log("func:"+data);
console.log("func:"+retur);
console.log("func:----");
});
}
下面是詳細解釋
首先清楚一點,異步請求理論上是在正常的js代碼執行完畢之后才發送,所以不難理解為什么上述一直返回的是c,因為代碼都循環結束了,才一起發送的請求
然后我簡單的畫了兩張圖,便於理解

