Рубрики
Без рубрики

Руководство по переменным подъемам JavaScript? с пусть и const

Bhuvan Malik Руководство по переменным подъемам JavaScript? С нужными разработчиками JavaScript javaScript часто испытывают трудное время, понимающее уникальное поведение переменных / функциональных подъемов. Поскольку мы будем говорить о VAR, пусть и Const декларации позже, важно понимать переменную подъемность

Автор оригинала: FreeCodeCamp Community Member.

Бхуван Малик

Новые разработчики JavaScript часто имеют трудное время, понимая уникальное поведение переменной/функции Подъем Отказ

Так как мы будем говорить о var , Пусть и Const Декларации позже, важно понимать Переменная подтяжка а не Функциональный подъемник Отказ Давайте погрузиться в!

Что такое вариабельный подъемник?

Двигатель JavaScript обрабатывает все переменные объявления с использованием « var », как если бы они были объявлены в верхней части функциональной области (при объявлении внутри функции) или глобальной областью (при объявлении вне функции) независимо от того, где фактический Декларация возникает. Это по сути это « поднятие ».

Таким образом, переменные могут быть доступны до их декларации.

Давайте посмотрим в действии ..

// OUTPUT : undefinedconsole.log(shape);
var shape = "square";
// OUTPUT : "square"console.log(shape);

Если вы идете с языков на основе C, вы ожидаете, что ошибка будет брошена, когда первая console.log называется с момента переменной Форма не был определен в этот момент. Но интерпретатор JavaScript выглядит вперед и «поднимает» все переменные объявления к вершине, и инициализация остается в том же месте.

Вот что происходит за кулисами:

//declaration getting hoisted at the topvar shape;
// OUTPUT : undefinedconsole.log(shape);
shape = "square";
// OUTPUT : "square"console.log(shape);

Вот еще один пример на этот раз в функциональном объеме, чтобы сделать все более понятно:

function getShape(condition) {    // shape exists here with a value of undefined
    // OUTPUT : undefined    console.log(shape);
    if (condition) {        var shape = "square";        // some other code        return shape;    } else {        // shape exists here with a value of undefined        return false;    }}

Вы можете увидеть в приведенном выше примере, как Форма Декларация поднимается на вершине getshape () функция. Это потому, что если/else Blocks не создают локальный объем, как видно на других языках. Локальный объем – это по сути функциональный объем в JavaScript. Поэтому форма доступна повсюду за пределами Если Блок и внутри функции с ‘ undefined ‘ значение.

Это поведение по умолчанию JavaScript имеет свою справедливую долю преимуществ и недостатков. Не полностью понимая, что они могут привести к тонким, но опасным ошибкам в нашем коде.

Введите объявления уровня блока!

ES6 ввел параметры на уровне блока, чтобы обеспечить разработчикам больше контроля и гибкости по жизненному цикле переменной.

Декларации уровня блока выполнены в блоках/лексических областях, которые создаются внутри блока «{}».

Пусть декларации

Этот синтаксис похож на var просто замените var с Пусть объявить переменную со своей областью, являющейся только этим блоком кода.

Поместите свой Пусть Декларации в верхней части в блоке, поэтому они будут доступны в течение всего этого блока.

Например:

function getShape(condition) {// shape doesn't exist here
// console.log(shape); => ReferenceError: shape is not defined
if (condition) {        let shape = "square";        // some other code        return shape;    } else {        // shape doesn't exist here as well        return false;    }}

Обратите внимание, как существует форма только внутри Если Блок и бросает ошибку при доступе к ней вместо вывода undefined Как наш предыдущий случай с var Декларации.

Примечание : Если идентификатор уже был определен внутри масштаба с var Используя тот же идентификатор в Пусть Декларация внутри того же охвата бросает ошибку. Также никакой ошибки не бросается, если A Пусть Декларация создает переменную с таким же именем, что и у переменной в ее внешнем объеме. (Этот случай одинаково с const Декларации, которые мы поговорим в ближайшее время.)

Например:

var shape = "square";let shape = "rectangle";
// SyntaxError: Identifier 'shape' has already been declared

а также:

var shape = "square";if (condition) {    // doesn't throw an error    let shape = "rectangle";    // more code }// No error

Const Декларации

Синтаксис декларации похож на Пусть & var , жизненный цикл такой же, как Пусть Отказ Но вы должны следовать некоторым правилам.

Привязки объявлены с использованием Const рассматриваются как Константы и Поэтому Они не могут быть переназначены значениями, однажды определенные Отказ Благодаря этому, каждый Const Декларация должен быть инициализирован во время декларации.

Например:

// valid const shape = "triangle";
// syntax error: missing initializationconst color;
// TypeError: Assignment to constant variableshape = "square"

Однако Свойства объекта могут быть изменены!

const shape = {    name: "triangle",    sides: 3}
// WORKSshape.name = "square";shape.sides = 4;
// SyntaxError: Invalid shorthand property initializershape = {    name: "hexagon",    sides: 6}

В приведенном выше примере мы видим, что только свойства Форма объект может быть изменен, потому что мы меняем только что Форма Содержит, не то, что это связано.

Мы можем обобщить, говоря, что Const Предотвращает модификацию связывания в целом – не значение того, что он обязан.

Примечание. Свойства могут быть мутированы. Так что для истинной неподумности используйте Immutable.js или Mori.

Временная мертвая зона

Теперь мы знаем, что доступ к Пусть или Const Переменные, прежде чем они объявлены, будут бросать Собственный ресурс Отказ Этот период между входом в объем и объявлен, где их можно получить доступ, называется временной мертвой зоной.

Обратите внимание, что «временная мертвая зона» не упоминается в спецификации Ecmascript. Это просто популярный термин среди программистов.

Я лично рекомендую вам всегда использовать Const , как это приводит к меньшему количеству ошибок. Я еще не сталкивался с ситуацией, когда мне нужно было использовать var Отказ

Как правило, используйте Пусть только для счетчиков петлей или только если вам действительно нужно переназначение. Везде еще использовать Const Отказ Лично я бросил петли для фильтра (), карты () и уменьшения (). Вы тоже должны.

Обязательно проверьте деталь 2 для этого на функциональных подъемных и важных вопросах собеседования, связанные с темой подъема в JS.

Функция Подъемные и подъемные Вопросы Вопросы Это часть 2 для моей предыдущей статьи о переменных подъемных под названием «Руководство по подъему переменной JavaScript? С … M Edium.freecodeCamp.org

Нажмите здесь Для моей статьи о некоторых из полезных новых функций в ES6 связаны с функциями.

Увидимся в следующий раз. Мир! ✌️️.