В этом случае важен текст функции. Если вы ссылаетесь на любую из ваших локальных переменных (x
, letters
, letter
, ...) в выражениях функций, они "закрывают" (google замыкания для получения дополнительной информации) переменные и, когда функция Выражение вызывается для обработки событий, они будут иметь ссылку на последнее значение, назначенное букве. Например:
var x = "Alice";
var helloAlice = function() { alert("Hello, " + x); };
x = "Bob";
helloAlice(); // Alerts "Hello, Bob"
Есть несколько способов решить эту проблему. Одним из методов является использование самовыполняющейся функции:
var x = "Alice";
var helloAlice = (function(name) {
return function() { alert("Hello, " + name); };
})(x);
x = "Bob";
helloAlice(); // Alerts "Hello, Alice"
Ваш код var letter = letters[x];
не не работает так, потому что JavaScript не поддерживает определение уровня блока, только уровень функции. Это означает, что в вашем коде letter
находится в той же области, что и letters
(Вы также должны узнать о переменных Google, чтобы узнать больше).