• 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

Object Storage Arubacloud
0 głosów
132 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 143 wizyt
pytanie zadane 17 lipca 2020 w JavaScript przez creend Gaduła (4,700 p.)
0 głosów
1 odpowiedź 131 wizyt
pytanie zadane 28 lipca 2022 w JavaScript przez KubaLaska Początkujący (350 p.)
0 głosów
2 odpowiedzi 243 wizyt
pytanie zadane 11 marca 2020 w JavaScript przez PoProstuTomasz Początkujący (470 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...