После переноса цикла в функцию, в последней остался параметр length, который был локально обозначен перед циклом и был успешно там забыт. Но ошибки компилятор не выдал и косяк не был замечен сразу. Потом я обратил внимание на этот загадочный length.
Откуда же он взялся?
А взялся он от функции и равен количеству аргументов, заданных в сигнатуре функции. Он отличается от arguments.length тем, что arguments.length равен реально переданному количеству аргументов. Например, если компилировать в standard mode:
function traceLength(x:uint, y:uint):void
{
trace("получено: " + arguments.length);
trace("ожидалось: " + traceLength.length); // или просто length
}
traceLength(3, 5, 7, 11);
/* output:
получено: 4
ожидалось: 2 */
Ссылка на доку
2 комментария:
Любопытно...Но зачем компилировать в Standart Mode? Я всегда в Strict собираю, а перед релизом вычищаю даже все warning'и по возможности
Никто и не призывает компилировать в Standrt mode. Просто надо быть внимательнее с переменной length, если она используется в методе. В моем случае при видимом отсутствии ошибки код выдавал невалидный результат.
Отправить комментарий