"использовать строгое", не останавливая подъем в области действия функции
Моя проблема лежит здесь, я изучаю 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 в строгом режиме не позволяет использовать переменные, если они не объявлены. Ничто здесь не относится к тому, что он отключает подъем. Он просто выдает ошибку, если инициализируемая переменная не объявлена.