Funktion Scoping war völlig in Ordnung für mich seit 2 Jahrzehnten. Jetzt lese ich überall, dass ich let
und const
anstelle von var
verwenden soll. Ich schätze, das liegt hauptsächlich daran, dass es ein neues Feature ist. Warum sollte ich den Blockumfang bevorzugen?Warum sollte ich den Block Scope anstelle des Funktionsumfangs verwenden?
Antwort
const
hat den offensichtlichen Vorteil, dass es eine konstante Bindung ist. let
hat eine temporäre Totzone, und es ist verboten, einen Identifikator im selben Umfang neu zu deklarieren, so dass es hilft, bestimmte Fehler zu vermeiden.
Abgesehen davon ist nichts falsch daran, var
weiter zu verwenden, wenn Sie keinen Blockbereich benötigen.
Const sind großartig, aber lassen Sie uns zu einigen interessanten Fehlern führen ... zum Beispiel fragt 'typeof' Blockvariable vor der Initialisierung führen zu Fehler ... – Akxe
@Akxe: Und warum würden Sie nach dem Typ fragen, wenn die Variable nicht war initialisiert noch? Ich betrachte die Fehler, die für 'Let'-Fälle ausgelöst werden, als Feature. –
Danke! Ich werde 'var' behalten und ich werde' Let' und 'Const' bei meinen Hobbyprojekten üben. – inf3rno
- 1. Warum sollte ich Isolated scope verwenden?
- 2. Wann sollte ich String.Format oder String.Concat anstelle des Verkettungsoperators verwenden?
- 3. Android: Wann/warum sollte ich FrameLayout anstelle von Fragment verwenden?
- 4. Warum sollte ich BeginWrite anstelle von Write verwenden?
- 5. Zugriffsvariable außerhalb des Funktionsumfangs
- 6. Was sollte ich anstelle des veralteten UISegmentedControlStyleBezeile in iOS5.1 verwenden?
- 7. Welche Klasse sollte ich anstelle des veralteten AmazonCloudFrontClient verwenden?
- 8. Warum sollte ich operator.itemgetter (x) anstelle von [x] verwenden?
- 9. Warum sollte ich Runnable anstelle von Thread verwenden?
- 10. Warum sollte ich gRPC anstelle von IPC/Simple Websocket verwenden?
- 11. Warum sollte ich anstelle von WireMock MockWebServer verwenden?
- 12. Was sollte ich anstelle von isinstance() verwenden
- 13. Ermitteln des Wertes eines Funktionsumfangs
- 14. Warum sollte ich glBindAttribLocation verwenden?
- 15. Warum sollte ich LabelFor in MVC verwenden?
- 16. Warum var anstelle des Klassennamens verwenden?
- 17. Zugriff auf Funktionsvariablen außerhalb des Funktionsumfangs
- 18. Warum sollte man REST anstelle von SOAP-basierten Diensten verwenden?
- 19. Warum sollte ich Boolean als Parameter anstelle von "boolean" übergeben?
- 20. Warum sollte ich den Zeiger in Quick Sort verwenden?
- 21. Warum sollte ich den Verweis auf const in Constructor verwenden?
- 22. Boolescher Wert außerhalb des JS-Funktionsumfangs erzwingen
- 23. Sollte ich einen Iframe anstelle von Ajax verwenden?
- 24. Wann sollte ich anstelle einer Direktive eine Komponente verwenden?
- 25. NodeJs - kann nicht auf den aktualisierten Wert des Arrays außerhalb des Funktionsumfangs zugreifen
- 26. HTML5: Warum sollte ich Abschnitt oder Artikel anstelle von div
- 27. Wann sollte ich ein UserControl anstelle einer Seite verwenden?
- 28. RequestStack Wann sollte ich getMasterRequest anstelle von getCurrentRequest verwenden?
- 29. Warum sollte ich nicht Unity verwenden?
- 30. Warum sollte ich Struts lernen und verwenden?
Da JS lange Zeit dafür kritisiert wurde, dass er keine Block-Scopes respektierte, die alle anderen (zumindest berühmten) Sprachen respektierten. Jetzt bewegt sich JS auf diese Sprachen zu, indem es viele Lücken füllt. –
Sie sollten nicht, es sei denn, Sie haben einen guten Grund, dies zu tun. Ein guter Grund für die weitere Verwendung von * var * ist, dass es abwärtskompatibel ist. * const * und * let * schränken die Umgebung ein, in der der Code für sehr wenig Vorteile verwendet wird. Sie können ähnliche Vorteile von * strict mode * erhalten (der auch abwärtskompatibel ist). – RobG
Sie können hier lesen, warum Sie verwenden sollten, lassen und const, es geht um "Variable hissen" http://StackOverflow.com/Questions/3725546/Variable-Hoisting –