пятница, 21 июня 2013 г.

Переменные всегда создаются в начале функции.

Переменные всегда создаются в начале функции. Так делать нельзя:

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"]

Комментариев нет:

Отправить комментарий