• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Niewłaściwe działanie transpilatora

VPS Starter Arubacloud
0 głosów
124 wizyt
pytanie zadane 30 sierpnia 2020 w JavaScript przez maslokeeper01 Użytkownik (620 p.)

Witam,

W skrypcie mam następującą pętlę:
 

function resetCats(){
let images = document.querySelectorAll('.cats');
let size = images.length;
for (i=0; i<size; i++)
    images[i].remove();
}

Z użyciem Babela transpiluję kod z @babel/preset-env, czyli transpilator powinien np. dodać słowo kluczowe var przed zmienną i będącą iteratorem pętli. Po wykonaniu skryptu Babela pętla w pliku źródłowym wygląda następująco:

function resetCats() {
  var images = document.querySelectorAll('.cats');
  var size = images.length;

  for (i = 0; i < size; i++) {
    images[i].remove();
  }

Jak widać, zmienna i pozostaje bez słowa kluczowego, przez co skrypt odpalony w strict mode program wyrzuca error.

Dlaczego użycie transpilatora nie skutkuje dopisaniem słowa kluczowego var, jak powinno być w tym przypadku?

Załączam plik konfiguracyjny babel.config.json:
 

{
    "presets": ["@babel/preset-env"],
    "plugins": []
}

 

komentarz 30 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

Swoją drogą, dlaczego sam nie zadeklarowałeś zmiennej i przez var lub let? Gdybyś użył lintera, to powinien krzyczeć, że masz niezadeklarowaną zmienną (lub implicit global) w nagłówku pętli - możesz go skonfigurować żeby sprawdził pliki projektu zanim proces budowania się rozpocznie.

2 odpowiedzi

0 głosów
odpowiedź 30 sierpnia 2020 przez niezalogowany

> Dlaczego użycie transpilatora nie skutkuje dopisaniem słowa kluczowego var?

Nie wiem, ale proponuję dopisać w Twoim kodzie:

for (let i=0; i<size; i++)

Powinno rozwiązać problem z brakiem var

komentarz 30 sierpnia 2020 przez maslokeeper01 Użytkownik (620 p.)
Wiem, ale transpilator ma działać w taki sposób, że rzeczy nieprzechodzące przez interpreter przeglądarki (głównie rzeczy ze standardu ES2015+) kompiluje w taki sposób, żeby przeglądarka je rozumiała. Chrome nie ma problemu z brakiem var, IE już może, a Babel jest po to, żeby takich mankamentów nie musieć pilnować samemu.
komentarz 30 sierpnia 2020 przez niezalogowany
Wszystko działa wszystko poprawnie.

Stworzyłeś zmienną globalną i oczekujesz że transpilator zamieni ją na zmienną o zasięgu funkcyjnym. Czemu miałby to zrobić?
0 głosów
odpowiedź 30 sierpnia 2020 przez Artek Stary wyjadacz (11,800 p.)
Podejrzewam, że skoro sam nie użyłeś ani var ani let to po prostu nie dodał. W sumie dlaczego miałby dodawać? Przecież nie każda zmienna używana wewnątrz funkcji musi być w niej zadeklarowana. Może pochodzić z zakresu nadrzędnego.

Podobne pytania

0 głosów
0 odpowiedzi 141 wizyt
pytanie zadane 17 lipca 2020 w JavaScript przez creend Gaduła (4,700 p.)
0 głosów
1 odpowiedź 125 wizyt
pytanie zadane 28 lipca 2022 w JavaScript przez KubaLaska Początkujący (350 p.)
0 głosów
2 odpowiedzi 233 wizyt
pytanie zadane 11 marca 2020 w JavaScript przez PoProstuTomasz Początkujący (470 p.)

92,452 zapytań

141,261 odpowiedzi

319,074 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...