for (var i=0 ; i<10 ; i++){
var myFunction = function(something){
console.log(i);
}
$.ajax({
url: "something.json",
dataType: "json",
success: function( response ) {
myFunction(response.something);
}
});
}
Как я могу получить доступ к последней я в myFunction каждый раз, когда цикл проходит через цикл for. Кажется, что последний я в myFunction недоступен, поэтому он не регистрируется с я = 0 до 9.
Это, вероятно, не самое эффективное решение. Но это действительно работает. Вы можете установить переменные объекта в запрос и получить к ним доступ с помощью.call на myFunction
for (var i=0 ; i<10 ; i++){
var myFunction = function(something){
console.log(this.localData.i);
}
$.ajax({
url: "/echo/json/",
dataType: "json",
//Set the i variable to this request
localData: {
i: i
},
success: function( response ) {
//call myFunction with this as the context, and you'll be able to access localData by using this.localData.i
myFunction.call(this, response.something)
}
});
}
Вот такая скрипка: http://jsfiddle.net/XxRAv/1/
Вы видите эффекты позднего связывания. Одним из решений является создание функции-оболочки и вызов ее, которая вернет правильную функцию:
var myFunction = function(i){
return function(something){ console.log(i); };
}(i);
function myFunction(i,something){
console.log(i);
console.log(something);
}
for (var i=0 ; i<10 ; i++){
$.ajax({
url: "something.json",
dataType: "json",
success: function( response ) {
myFunction(response.something);
}
});
}