По крайней мере, это то, что я думаю, что это произойдет в этом случае:JavaScript SetTimeout не может получить доступ к переменной функции
function MyFunc() {
var people = Array({name: 'Alex', age: 25}, {name: 'Ellen', age: 43});
for (var i=0; i<people.length; i++) {
setTimeout(function() { ShowIt(people[i].name) }, 1000); // !!!
}
}
function ShowIt(name) {
alert(name);
}
Я получаю эту ошибку Uncaught TypeError: Cannot read property 'name' of undefined
, поэтому он выглядит как внутри функции setTimeout
слушателя переменная people
не доступны. Почему и как я могу это исправить?
Это очень распространенная ошибка, см. Этот вопрос: http://stackoverflow.com/questions/5226285/settimeout-in-a-for-loop-and-pass-i-as-value –
Нет, это означает что 'people [i]' не определен. Если «люди» не были в сфере охвата, вы получили бы что-то вроде «Uncaught ReferenceError: люди не определены». –