W JavaScript można zadeklarować wiele zmiennych takich jak to:
var variable1 = "Hello World!";
var variable2 = "Testing...";
var variable3 = 42;
... lub tak:
var variable1 = "Hello World!",
variable2 = "Testing...",
variable3 = 42;
Czy jedna metoda jest lepsza / szybsza od drugiej?
javascript
variables
coding-style
performance
declaration
Steve Harrison
źródło
źródło
Odpowiedzi:
Pierwszy sposób jest łatwiejszy w utrzymaniu. Każda deklaracja jest pojedynczą instrukcją w jednym wierszu, dzięki czemu można łatwo dodawać, usuwać i zmieniać kolejność deklaracji.
W przypadku drugiego sposobu denerwujące jest usunięcie pierwszej lub ostatniej deklaracji, ponieważ zawierają one
var
słowo kluczowe i średnik. I za każdym razem, gdy dodajesz nową deklarację, musisz zmienić średnik w starej linii na przecinek.źródło
Oprócz łatwości konserwacji, pierwszy sposób eliminuje możliwość tworzenia globalnych zmiennych wypadkowych:
Podczas gdy drugi sposób jest mniej wybaczający:
źródło
var variable1 = "Hello World!", variable2 = "Testing...", variable3 = 42;
. Zaginiony,
rozbije się, ale zgadzam się, że jest ryzykownyPossible Fatal Error
jeśli przegapię śpiączkę, hurra dla mnie!W organizacji często stosuje się jedno
var
zdanie na zakres . Sposób, w jaki wszystkie „zakresy” mają podobny wzór, dzięki czemu kod jest bardziej czytelny. Dodatkowo silnik i tak „podnosi” je wszystkie na szczyt. Tak więc utrzymywanie razem swoich deklaracji naśladuje to, co faktycznie stanie się bliżej.źródło
var
stwierdzeniem. jest dokładnie odwrotnie. zobacz dokumentację i ten przykładRobiąc to w ten sposób, jest o wiele bardziej czytelny:
Ale w ten sposób zajmuje mniej miejsca i wierszy kodu:
Może być idealny do oszczędzania miejsca, ale pozwól, aby kompresory JavaScript obsługiwały go za Ciebie.
źródło
Może tak
Z wyjątkiem zmiany pierwszej lub ostatniej zmiennej, jest łatwa do utrzymania i odczytu.
źródło
To tylko kwestia osobistych preferencji. Nie ma różnicy między tymi dwoma sposobami, poza kilkoma bajtami zapisanymi w drugim formularzu, jeśli usuniesz białe znaki.
źródło
ECMAScript6 introducted destructuring assignment który działa całkiem ładny:
[a, b] = [1, 2]
a
będzie równy1
ib
będzie równy2
.źródło
let [aVar, bVar, cVar, xVar, yVar, zVar] = [10, 20, 30, 40, 50];
Więc osobiście nie polecam tego.jest bardziej czytelny niż:
Ale robią to samo.
źródło
var<space>
jego<space><space><space><space>
var<space>
lubvar<tab>
kontra<tab>
. Nadal w dużej mierze dyskusyjne.Użyj przypisania Destrukturyzacji ES6 : Rozpakuje wartości z tablic lub właściwości z obiektów do odrębnych zmiennych.
źródło
Moim jedynym, ale niezbędnym zastosowaniem przecinka jest pętla for:
Poszedłem tutaj, aby sprawdzić, czy w JavaScript jest to w porządku.
Nawet widząc, jak działa, pozostaje pytanie, czy n jest lokalne dla funkcji.
To weryfikuje, n jest lokalne:
Przez chwilę nie byłem pewien, przełączając się między językami.
źródło
Chociaż oba są poprawne, użycie drugiego odradza niedoświadczonym programistom umieszczanie instrukcji var w dowolnym miejscu i powodowanie problemów z podnoszeniem. Jeśli na górze funkcji znajduje się tylko jedna zmienna na funkcję, łatwiej jest debugować kod jako całość. Może to oznaczać, że linie, w których zmienne są zadeklarowane, nie są tak wyraźne, jak niektórym się to spodoba.
Uważam, że kompromis jest tego wart, jeśli oznacza to oderwanie programisty od porzucenia „var” w dowolnym miejscu.
Ludzie mogą narzekać na JSLint, ja też, ale wiele z nich jest nastawionych nie na rozwiązywanie problemów z językiem, ale na korygowanie złych nawyków programistów, a tym samym zapobieganie problemom w pisanym kodzie. W związku z tym:
„W językach z zakresem blokowym zwykle zaleca się deklarowanie zmiennych w miejscu pierwszego użycia. Ponieważ JavaScript nie ma zakresu blokowego, mądrzej jest zadeklarować wszystkie zmienne funkcji na górze funkcji. zaleca się stosowanie jednej funkcji var dla każdej funkcji. ” - http://www.jslint.com/lint.html#scope
źródło
Myślę, że to kwestia osobistych preferencji. Wolę to zrobić w następujący sposób:
źródło
Kolejnym powodem, dla którego należy unikać wersji z pojedynczą instrukcją (single var ), jest debugowanie. Jeśli jest wyjątek w dowolny z linii przypisania ślad stosu pokazuje tylko jedną linię.
Jeśli zdefiniowano 10 zmiennych za pomocą składni przecinków, nie można bezpośrednio wiedzieć, który z nich był winowajcą.
Indywidualna wersja oświadczenia nie cierpi z powodu tej dwuznaczności.
źródło
Pojęcie „spójności nad sprzężeniem” może być stosowane bardziej ogólnie niż tylko obiekty / moduły / funkcje. Może również służyć w tej sytuacji:
Drugi przykład, który zasugerował OP, połączył wszystkie zmienne w tę samą instrukcję, co uniemożliwia pobranie jednej z linii i przeniesienie jej gdzie indziej bez zerwania rzeczy (wysokie sprzężenie). Pierwszy podany przez niego przykład uniezależnia przypisania zmiennych (niskie sprzężenie).
„Niskie sprzężenie jest często oznaką dobrze skonstruowanego systemu komputerowego i dobrego projektu, a w połączeniu z wysoką spójnością wspiera ogólne cele wysokiej czytelności i łatwości konserwacji”.
http://en.wikipedia.org/wiki/Coupling_(computer_programming)
Więc wybierz pierwszy.
źródło
Stary post, wiem, ale aby dodać mały szczegół perspektywy dla innych pracowników Google:
Kwestię łatwości konserwacji można dość łatwo rozwiązać za pomocą niewielkiego formatowania.
Używam tego formatowania wyłącznie w celu osobistych preferencji. Oczywiście pomijam ten format w przypadku pojedynczych deklaracji lub tam, gdzie po prostu działa.
źródło
Wierzę, że zanim zaczęliśmy używać ES6, podejście z deklaracją pojedynczego var nie było ani dobre, ani złe (w przypadku, gdy masz kłaczki i
'use strict'
. To było naprawdę preferencje smakowe. Ale teraz wszystko się zmieniło. Są moje przemyślenia na korzyść deklaracji wielowierszowej :Teraz mamy dwa nowe rodzaje zmiennych i
var
stało się nieaktualne. Dobrą praktyką jest stosowanieconst
wszędzie, dopóki naprawdę nie potrzebujeszlet
. Tak często twój kod będzie zawierał deklaracje zmiennych z przypisaniem w środku kodu, a ze względu na zakres bloków dość często przenosisz zmienne między blokami w przypadku niewielkich zmian. Myślę, że bardziej przekonujące jest robienie tego z deklaracjami wieloliniowymi.Składnia ES6 stała się bardziej zróżnicowana, otrzymaliśmy destruktory, ciągi szablonów, funkcje strzałek i opcjonalne przypisania. Kiedy mocno używasz wszystkich tych funkcji z deklaracjami pojedynczego var, szkodzi to czytelności.
źródło
Myślę, że najlepszy jest pierwszy sposób (wiele zmiennych), ponieważ w przeciwnym razie możesz skończyć z tym (z aplikacji korzystającej z Knockout), co moim zdaniem jest trudne do odczytania:
źródło