Если babel преобразует let и const в var, какая разница? - PullRequest
0 голосов
/ 14 февраля 2019

Я пробовал конвейер babel , и он конвертирует All let, const и var в просто var, так что, в чем разница в использовании нашего кода?
Я прочитал документы и Я знаю, в чем разница между let, const и var , но если все они в конечном итоге преобразуются в var , в чем разница ?это означает, что не должно быть никаких существенных различий в производительности или даже объеме!

Обновление (14.02.2019): На основании полученных ответов я понял, что область действия имеет значение, и хотя онипреобразуются в var, babel сохраняет значение объема.У меня остается вопрос о производительности, есть ли существенная разница в производительности ?

Я подключил вход и выход транспилятора с более сложным сценарием
вход :

let a = 1;

for (let a = 0; a !== 0;) {
  for (let a = 0; a !== 0;) {}
}

выход

"use strict";

var a = 1;

for (var _a = 0; _a !== 0;) {
  for (var _a2 = 0; _a2 !== 0;) {}
}

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Babel преобразует синтаксис ES6 в синтаксис ES5 (или любую исходную и целевую версии JS, с которыми вы имеете дело).

Это часто теряет некоторые нюансы в коде, но вы смотрите наочень тривиальный пример.

Рассмотрите это вместо этого:

let x = 1;

{
  // Inside a block, this is a different x
  let x = 2; 
  console.log(x);
}

console.log(x);

Babel преобразует это в:

"use strict";

var x = 1;
{
  // Inside a block, this is a different x
  var _x = 2;
  console.log(_x);
}
console.log(x);

Посмотрите, как оно переименовывает внутренний x, чтобы не перезаписыватьвнешний?

Он выражает эффект ES6 настолько, насколько это возможно в ES5, даже если результат уродлив (потому что элегантная функция из ES6 недоступна).

0 голосов
/ 14 февраля 2019

Вавилон проверяет каждую переменную и выдает ошибки, если нарушены определенные процедурные правила.Например, если определено const, а значение будет изменено позже, это нарушит правила типа.Другое было бы, если бы переменная была переопределена в области, где она уже существует (это может быть функция с тем же именем).В некоторых случаях Babel просто переименовывает вещи, чтобы предотвратить конфликты.

...