Итак, сегодня я начал обходиться с JavaScript, и я наткнулся на забавный случай, когда он кажется убежденным в том, что что-то является функцией, а также убежден, что это не функция. Этот код иллюстрирует проблему:JavaScript: TypeError с массивом функций
var arr1 = Array(1)
for (i = 0; i < arr1.length; i++) {
arr1[i] = function(n) { return n + i }
}
var arr2 = Array(1)
for (j = 0; j < arr2.length; j++) {
arr2[j] = function(n) { return arr1[j](n) }
}
typeof arr2[0] // "function"
arr2[0](2) // TypeError: Property '1' of object [object Array] is not a function
Здесь вы можете назначить переменную arr2[0]
, и ошибка не будет устранена. Я не уверен, нужны ли закрытия или массивы, чтобы воспроизвести это.
Есть что-то с моим кодом, или это только одна из тех странностей JavaScript? Это не то, что я особенно нуждаюсь в ответе, но это немного глупо, поэтому я хотел бы знать, есть ли причина для этого.
Почему 'Массив (1)' и контур вместо 'вар arr1 = [функция (п) {возвращения N + 1;}];'? –
Возможный дубликат [Закрытие Javascript внутри петель - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – bfavaretto
Это изначально произошло, когда я экспериментировал с массивы замыканий по индексам цикла, поэтому я просто сохранил это так: – boxes