W swoim kodzie Javascript mam m.in. następującą pętlę:
for (let imgFlNm in imageFilesNames) {
// (tu różne ciekawe rzeczy)
}
Kiedy sprawdzam ten kod w JSLint (http://www.jslint.com/), wyskakuje mi następujący błąd:
JSLint was unable to finish.
Unexpected 'let'. (tu numer linii, w której jest przytoczona wyżej pętla)
Ogólnie chciałbym wiedzieć: czemu JSLint określa to jako błąd?
Co już wiem:
- JSLint posiada zaimplementowaną obsługę standardu EcmaScript 6 (http://www.jslint.com/help.html; czy nowszych jego wersji, nie wiem nic na ten temat; z tego, co się orientuję, słowo kluczowe
let
doszło w wersji 5). - Ostatni commit do gita JSLint (https://github.com/douglascrockford/JSLint) był dziś (1 kwietnia 2018).
- Nie znalazłem w internecie nic stricte jeśli chodzi o obecność słowa kluczowego
let
w nagłówku pętlifor
. - Powyższe trzy informacje wykluczają dla mnie, jakoby ten błąd był bugiem.
- Znalazłem za to informacje na temat obecności słowa kluczowego
var
w nagłówku pętlifor
(https://stackoverflow.com/questions/10200994/declaring-var-inside-javascript-for-loop-declaration oraz https://stackoverflow.com/questions/23105006/why-does-not-jslint-allow-var-in-a-for-loop) – ale te informacje nie wydają się odpowiadać na moje pytanie (chyba że nie umiem czytać między wierszami). - Jeśli zamienię
let
navar
, błąd wyświetla się taki sam (zresztą zgodnie z podanymi wyżej odpowiedziami na StackOverflow).
I możliwe są według mnie trzy odpowiedzi na moje pytanie:
- Jest to błąd, ponieważ JSLint został napisany zgodnie z pewnymi mniej lub bardziej popularnymi założeniami (i to autora przed wszystkimi trzeba pytać).
- Jest to błąd, ponieważ jest to jednak bug – skoro
let
posiada zasięg blokowy i w JSLint to słowo kluczowe jestuznawanezaimplementowane, to nie powinno być ono traktowane tak samo jakvar
. - ???
Pytanie zadaję głównie z ciekawości, choć nie ukrywam, że bardzo chciałbym rozumieć narzędzie, którego używam. Oczywiście tak samo ważne jest dla mnie, by rozumieć język Javascript i jego najbardziej popularne konwencje.