Рассмотрим следующий фрагмент кода:JS Scoping вопрос
function processParagraph(paragraph) {
if (paragraph.charAt(0) === '%') {
for (var level = 0; paragraph.charAt(level) === '%'; level++) {}
return {
type: 'h' + level,
content: paragraph.slice(level + 1)
};
}
return {
type: 'p' + level,
content: paragraph
};
}
Когда я проверить это с JSLint, он жалуется, что level
во второй оператор возврата used out of scope.
.
Но почему? AFAIK, JavaScript имеет лексический охват/область действия. Поскольку нет вложенных функций, код должен быть абсолютно корректным. Или я чего-то не хватает?
Какова ценность «уровня», если параметр paragraph.charAt (0) не равен «%»? Поскольку первая декларация «уровня» находится внутри оператора if, она может жаловаться на возможное использование неизменной переменной. – adelphus
Вы уверены, что JSLint жалуется на эту переменную? Этот код правильный. Кстати, было бы лучше объявить переменную при начале функции, потому что этот код довольно трудно прочитать. –