Существуют ли какие-либо контексты / ситуации в модулях ES6, когда не удастся обновить var, чтобы позволить? - PullRequest
0 голосов
/ 25 февраля 2020

В течение некоторого времени я использовал const для объявления большинства переменных.

Если я точно не уверен, что новая переменная всегда будет содержать одно и то же значение, я объявлю новая переменная с let.

Я почти никогда не использую var.

Это я.

Тем не менее, любое другое индивидуальное написание javascript будет иметь свои предпочтения соглашения об объявлении переменных, и, если я принимаю пользовательский контент , например пользовательские модули ES6 , невозможно с уверенностью предсказать, какими могут быть эти соглашения.


Оставляя в стороне const на данный момент ...

var можно перезаписать на var:

Я знаю, что следующее:

  • var myString = 'My String declared with var';
  • var myFunction = function() {console.log('My Function declared with var')};

могут быть перезаписаны переменными с одинаковыми именами, объявленными с var.

Пример:

var myString = 'My String declared with var';
var myFunction = function() {console.log('My Function declared with var')};

var myString = 'My Overwriting String declared with var';
var myFunction = function() {console.log('My Overwriting Function declared with var')};

console.log(myString);
myFunction();

let нельзя перезаписать на var:

Я также знаю, что если myString и myFunction объявлены с let

  • let myString = 'My String declared with let';
  • let myFunction = function() {console.log('My Function declared with let')};

, они не могут быть впоследствии перезаписаны с var, let, или const.

Пример:

let myString = 'My String declared with let';
let myFunction = function() {console.log('My Function declared with let')};

var myString = 'My Overwriting String declared with var';
var myFunction = function() {console.log('My Overwriting Function declared with var')};

console.log(myString);
myFunction();

Итак, зная обе эти вещи, является ли разумной гарантией преобразование любых объявлений var в объявления let (либо во время компиляции, либо во время выполнения) во всех Отправленные пользователем модули ES6 ?

Существуют ли какие-либо мыслимые ситуации / ситуации в модулях ES6, когда не удастся обновить var до let?

1 Ответ

2 голосов
/ 25 февраля 2020

Если пользователь написал функцию, подобную этой, изменение var для let завершится неудачей:

function run() {
  for (var i = 0; i < 3; i++) {
    console.log(i);
  }
  console.log('final i', i);
}

console.log('starting run');
run();

function runLet() {
  for (let i = 0; i < 3; i++) {
    console.log(i);
  }
  console.log('final i', i);
}

console.log('starting runLet');
runLet();

ошибки функции runLet, поскольку я не определен.

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