Могу ли я полностью отказаться от использования var? - PullRequest
0 голосов
/ 14 мая 2018

Я беру курс Java, и все объявления используют область видимости (int, double, boolean, etc.). Однако в JavaScript var - это область действия функции.

let появился в ES6 и дал разработчикам JS блокировку. Я корректирую свой стиль кодирования и решаю избавиться от var все вместе.

Это O.K.?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Это O.K.?

Главным образом; возможно полностью. Есть очень несколько ситуаций, в которых вы хотите использовать var вместо let / const по техническим (а не по стилю) причинам:

  • Если вы хотите объявить глобальную переменную, которая становится свойством глобального объекта (глобальные let, const и class создают глобальные переменные, но они не становятся свойствами глобального объекта ).

    Конечно, вы могли бы использовать this.varName = ... вместо var varName, поскольку this в глобальном масштабе¹ является глобальным объектом.

  • Если вы хотите иметь несколько файлов, где любой из них может быть «первым» (но не последним) для определения того же глобального, как это обычно бывает в более старых форматах модулей, например ::

    var MyApp = MyApp || {};
    MyApp.something = /*...*/;
    

    Это работает, потому что часть var MyApp игнорируется, если MyApp уже объявлено; эквивалентная структура с let потерпит неудачу, потому что ее нельзя использовать, если идентификатор уже объявлен в текущей области.

    Конечно, вы, вероятно, уже используете новый формат модуля. :-) А если нет, снова вы могли бы сделать

    this.MyApp = this.MyApp || {};
    MyApp.something = /*...*/;
    

    в глобальном масштабе. ¹

[Там использовал для незначительного выигрыша в производительности при использовании var вместо let в функции, где он использовался в качестве счетчика цикла. Последние версии современных браузеров почти исключают эту незначительную выгоду (и она в любом случае была незначительной).]


¹ Обратите внимание, что код верхнего уровня в модуле (модуль ES2015, модуль Node.js, большинство сборщиков ...) в глобальном масштабе равен , а не . Это в рамках модуля. Также обратите внимание, что на верхнем уровне модуля ES2015 this имеет значение undefined.

0 голосов
/ 14 мая 2018

Если вы ориентируетесь только на платформы, поддерживающие ES6, используйте let и const.Прекратить использование var.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...