"использовать строгое", не останавливая подъем в области действия функции

Моя проблема лежит здесь, я изучаю JavaScript, но совсем не новичок в программировании. Я понимаю подъем, но в строгом режиме это не должно приводить к ошибке и быть пойманным, если 6 назначено для необъявленной переменной или назначено document.getElement... x, это не приводит к ошибке, так что мой диагноз состоит в том, что подъем все еще продолжается.. что я не люблю и хочу избавиться с помощью строгого. Использование Chrome версии 42.0.2311.152 m в качестве браузера

function strictMode(){
    'use strict';
    try {
        x = 6;
        document.getElementById('hoisting').innerHTML = x;
        var x;
     }
     catch(err) {
                    document.getElementById('error_report').innerHTML = 
                        "There was an error that occured (Were in Strict Mode)" +
                            " " + err.message;
               }
}

3 ответа

Решение

Объявления переменных (т.е. var x;) действительны для всей области, в которой они написаны, даже если вы объявляете после назначения. Это то, что подразумевается под "подъем": var x; поднимается в начало области, и назначение x = 6; хорошо, потому что x было объявлено где-то в этой области.

Строгий режим ничего не меняет. Было бы выдать ошибку, если вы пропустили var x; декларация в целом; без строгого режима область действия переменной будет неявно глобальной.

В ES2015 (он же ES6) избежать подъема с помощью let ключевое слово вместо var, (Другое отличие состоит в том, что переменные объявлены с let являются локальными для окружающего блока, а не для всей функции.)

Есть некоторые странные вещи, которые позволяет javascript, поскольку, изучая язык, вы должны научиться бороться с хорошими практиками кодирования (еще один хороший пример - символьные колонки). В случае подъема, как правило, рекомендуется объявлять ваши переменные в верхней части области видимости, в которую они все равно будут подняты. Как уже упоминалось, строгий режим не является серебряной пулей и не навязывает это вам.

Короче говоря, JavaScript в строгом режиме не позволяет использовать переменные, если они не объявлены. Ничто здесь не относится к тому, что он отключает подъем. Он просто выдает ошибку, если инициализируемая переменная не объявлена.

Другие вопросы по тегам