Переменные всегда создаются в начале функции. Так делать нельзя:
function trimSections(header, body, footer) {
for (var i = 0, n = header.length; i < n; i++) {
header[i] = header[i].trim();
}
for (var i = 0, n = body.length; i < n; i++) {
body[i] = body[i].trim();
}
for (var i = 0, n = footer.length; i < n; i++) {
footer[i] = footer[i].trim();
}
}
Потому что на самом деле здесь получается написано так
function trimSections(header, body, footer) {
var i, n;
for (i = 0, n = header.length; i < n; i++) {
header[i] = header[i].trim();
}
for (i = 0, n = body.length; i < n; i++) {
body[i] = body[i].trim();
}
for (i = 0, n = footer.length; i < n; i++) {
footer[i] = footer[i].trim();
}
}
Определение переменных i и n автоматически выносится в самое начало функции. Это касается и определение самих функций.
Все определяемые переменные автоматически всегда выносятся вверх. Переопределение переменной тоже выносится вверх и заменяет собой исходное определение переменной, что влияет на всеь код сразу, поскольку JavaScript сначала читает весь код, потом анализирует его и преобразует и только затем выполняет!!!
Но переменные определенные в блоке catch всегда являются локальными.
function test() {
var x = "var", result = [];
result.push(x);
try {
throw "exception";
} catch (x) {
x = "catch";
}
result.push(x);
return result;
}
test(); // ["var", "var"]
Комментариев нет:
Отправить комментарий