Когда ДЕЙСТВИТЕЛЬНО использовать var, const, let и стрелочные функции.

Пару дней назад у меня была возможность принять участие в конкурсе по программированию Dropbox. Сама задача была интересной, но одним из требований была оптимизация кода. Это означает, что не только ваш код должен быть правильным (очевидно :), но также должен быть достаточно быстрым, чтобы пройти все 10 тестов. Не могу сказать, что я отлично справился с этой задачей, но, как любой хороший программист, я углубляюсь в тему, чтобы убедиться, что не повторю ошибок.

Не секрет, что оптимизированный код придет с опытом, поэтому мои советы, практика, практика, практика! Где? "ЗДЕСЬ!"

Но что я могу сделать сейчас, так это освежить некоторые основы, которые могут повысить скорость кода! Почему мы это делаем? Что ж, оптимизация кода - это любой метод модификации кода для повышения качества и эффективности кода. Программа может быть оптимизирована так, чтобы она становилась меньшего размера, потребляла меньше памяти, выполнялась быстрее или выполняла меньше операций ввода / вывода.

Итак, поговорим об основах. Вы знаете, когда использовать var, const, let и стрелочные функции?

  • let: «Переменные, объявленные let, имеют свою область видимости в блоке, для которого они объявлены, а также во всех содержащихся подблоках. Таким образом, let работает очень похоже на var. Основное отличие состоит в том, что область видимости var переменной - это вся включающая функция ». Покажу на примере:
let n = 2;

   if (n > 1) {
        let message = "I am inside block";
        console.log(message);//"I am inside block"
    }
   console.log(message) // message is not defined

Обновление переменной, объявленной с помощью let, можно выполнить в пределах ее области действия:

let message = "Good day";
message = "Good night";// works fine!

не может быть повторно объявлен:

let message = "Good day";
let message = "Good night";//error: Identifier 'message' has already been declared
const message = 'Good day'; 

message = 'Good night'; // SyntaxError
message + '!'; // again a SyntaxError
but for constant object
const Anna = {age:"27", hair:"brown", eye:"green"};

// We can change a property:
Anna.eye = "blue";

// We can add a property:
Anna.lastname = "Smith";
But we cannot reassign a constant object!

Переменным const должно быть присвоено значение при их объявлении:

const message
message = 'Good day'// SyntaxError
  • var: « var объявления, где бы они ни появлялись, обрабатываются до выполнения любого кода. Это называется подъемом и обсуждается ниже. Область видимости переменной, объявленной с помощью var, - это ее текущий контекст выполнения и его закрытия, который является либо включающей функцией и функциями, объявленными в нем, либо, для переменных, объявленных вне любой функции, глобальными. Повторяющиеся объявления переменных с использованием var не вызовут ошибки даже в строгом режиме, и переменная не потеряет свое значение, если не будет выполнено другое присвоение ».

Основываясь на этой статье: Большинство экспертов по Javascript согласны с тем, что var не следует использовать. Дуглас Крокфорд, популяризатор JSON, против использования var. Он указывает, что var, возможно, все еще может быть полезен в крайнем случае, например, в машинно-сгенерированном коде, но я сильно растягиваюсь в этом направлении .

Тогда оставим это.

Ограничения:
- Не имеет собственных привязок к this или super и не должен использоваться как methods.
- Не содержит ключевых слов arguments или new.target.
- Не подходит для методов call, apply и bind, которые обычно полагаются на создание scope.
- Нельзя использовать как constructors.
- Нельзя использовать yield внутри его тела.

По умолчанию стрелочные функции возвращают значение. Им не нужно ничего возвращать, но если функция не должна быть недействительной (т.е. ожидается возвращаемое значение), рекомендуется вернуть какое-то значение по умолчанию.

// Traditional Function
function (a){
  return a + 100;
}

// Arrow Function Break Down

// 1. Remove the word "function" and place arrow between the argument and opening body bracket
(a) => {
  return a + 100;
}

// 2. Remove the body brackets and word "return" -- the return is implied.
(a) => a + 100;

// 3. Remove the argument parentheses
a => a + 100;

Для именованных функций мы обрабатываем стрелочные выражения как переменные:

// Traditional Function
function bob (a){
  return a + 100;
}

// Arrow Function
let bob = a => a + 100;

Любое неправильное использование инструментов JavaScript может замедлить ваш код. Часто бывает, что проблемы кодирования требуют знаний и четкого понимания синтаксиса и быстрого чистого кода. Не забывайте практиковать и укреплять основы! Удачи!