Ich bin interessiert, ob es Grenzen gibt, welche Arten von Werten const
in JavaScript festgelegt werden können - insbesondere Funktionen. Ist das gültig? Zugegeben, es funktioniert, aber wird es aus irgendeinem Grund als schlechte Praxis angesehen?
const doSomething = () => {
...
}
Sollten alle Funktionen in ES6 so definiert werden? Es scheint nicht so, als hätte sich das durchgesetzt, wenn ja.
Vielen Dank für alle Kommentare!
javascript
function
const
ecmascript-6
David Sinclair
quelle
quelle
var doSomething = <function def>;
. 4) "Sollten alle Funktionen in ES6 so definiert werden?" Scheint mir umständlich. Ich mag Funktionsdeklarationen. Jeder für sich.const
. Möchten Sie verhindern, dass Sie die Funktion überschreiben? Ich würde annehmen, dass Sie Ihren Code kennen, um dies sowieso nicht zu tun. Möchten Sie die Absicht ausdrückendoSomething
, dh dass es eine Funktion enthält und seinen Wert nicht ändert? Ich denke, Funktionserklärungen kommunizieren diese Absicht auch klar. Wenn Sie also einen "Laufzeitschutz" vor dem Überschreiben benötigen, entscheiden Sie sich dafür. Ansonsten sehe ich nicht viel Nutzen. Wenn Sie in erster Linie verwendenvar foo = function() {};
würden, würde ich natürlichconst
anstelle von verwendenvar
.const
.Antworten:
Es gibt kein Problem mit dem, was Sie getan haben, aber Sie müssen sich an den Unterschied zwischen Funktionsdeklarationen und Funktionsausdrücken erinnern.
Eine Funktionsdeklaration, das heißt:
Wird ganz nach oben gehoben (und wie
let
und wieconst
Zielfernrohrs gehoben sie sind ebenfalls blockumfangend).Dies bedeutet, dass Folgendes funktioniert:
Ein Funktionsausdruck, das heißt:
Ist die Erstellung einer anonymen Funktion (
function () {}
) und die Erstellung einer Variablen und dann die Zuordnung dieser anonymen Funktion zu dieser Variablen.Die üblichen Regeln für das Heben von Variablen innerhalb eines Bereichs - Variablen mit Blockbereich (
let
undconst
) also nichtundefined
an die Spitze ihres Blockbereichs.Das heisst:
Wird seitdem scheitern
doSomething
nicht definiert ist. (Es wird ein werfenReferenceError
)Wenn Sie zur Verwendung wechseln, wird
var
die Variable angehoben, aber sie wird auf initialisiertundefined
dass der obige Codeblock immer noch nicht funktioniert. (Dadurch wird einTypeError
DadoSomething
ausgelöst, das zum Zeitpunkt des Aufrufs keine Funktion ist.)In Bezug auf Standardpraktiken sollten Sie immer das richtige Werkzeug für den Job verwenden.
Axel Rauschmayer hat einen großartigen Beitrag zu Umfang und Heben einschließlich der es6-Semantik: Variablen und Umfang in ES6
quelle
function a(){console.log(this);}
und bconst a=_=>{console.log(this);}
ist, wenn Sie es so nennena.call(someVar);
, in a wird es gedrucktsomeVar
, in b wird es gedrucktwindow
.Das Verwenden
const
zum Definieren von Funktionen scheint zwar ein Hack zu sein, bringt aber einige große Vorteile mit sich, die es überlegen machen (meiner Meinung nach)Dadurch wird die Funktion unveränderlich, sodass Sie sich keine Sorgen machen müssen, dass diese Funktion durch einen anderen Code geändert wird.
Sie können die Syntax für fette Pfeile verwenden, die kürzer und sauberer ist.
Durch die Verwendung der Pfeilfunktionen wird die
this
Bindung für Sie erledigt.Beispiel mit
function
gleiches Beispiel mit
const
quelle
function f(x, y) {
ist 18 Zeichen,const f = (x, y) => {
ist 21 Zeichen, also 3 Zeichen länger. 3. Die Beibehaltung dieser Bindung ist nur wichtig, wenn die Funktionen innerhalb einer Methode (oder einer anderen Funktion, die dies bedeutet) definiert sind. Auf der obersten Ebene ist es sinnlos. Ich sage nicht, dass Sie falsch liegen, nur dass die Gründe, die Sie erwähnen, nicht besonders relevant sind.Es ist drei Jahre her, seit diese Frage gestellt wurde, aber ich stoße gerade darauf. Da diese Antwort so weit unten im Stapel liegt, erlaube mir bitte, sie zu wiederholen:
Ich war motiviert, Nachforschungen anzustellen, nachdem ich einen produktiven JavaScript-Codierer beobachtet hatte, der immer
const
Aussagen verwendetfunctions
, auch wenn es keinen offensichtlichen Grund / Nutzen gibt.Als Antwort auf " Wird es aus irgendeinem Grund als schlechte Praxis angesehen? " Lassen Sie mich sagen, IMO, ja, oder zumindest hat die Verwendung von Aussagen Vorteile
function
.Es scheint mir, dass dies weitgehend eine Frage der Präferenz und des Stils ist. Oben sind einige gute Argumente aufgeführt, aber keines ist so klar wie in diesem Artikel:
Ständige Verwirrung: Warum ich immer noch JavaScript-Funktionsanweisungen von medium.freecodecamp.org/Bill Sourour, JavaScript-Guru, Berater und Lehrer verwende.
Ich fordere alle auf, diesen Artikel zu lesen, auch wenn Sie bereits eine Entscheidung getroffen haben.
Hier sind die wichtigsten Punkte:
quelle
defaultErrorHandler
vorstellen , dh Funktionen, denen eine eigene Konstante als anonyme Funktion zugewiesen wurde, die ich dann von Versprechen-Handlern aufrufen kann. Dies würde es mir ermöglichen, diesen Standardfehlerbehandler optional innerhalb der Funktionen nach Bedarf zu überschreiben. Einige müssen nur ein Fehlerobjekt zurückgeben, andere müssen eine http-Antwort mit unterschiedlichem Ausführlichkeitsgrad zurückgeben. Die Codestruktur kann jedoch unabhängig davon ein bekanntes Muster sein..then( res.success, res.error )
viel mehr mag als die anonymen Funktionen, die ich nur aufrufen wollteres.success(value);
. Ein.then( ..., defaultErrorHandler)
gemeinsames Muster könnte mit einer auf oberster Ebene definierten defaultErrorHandler-Funktion und optional einerconst defaultErrorHandler = error => { ... }
deklarierten Funktion innerhalb eines Funktionsbereichs hilfreich sein .Die Verwendung von hat einige sehr wichtige Vorteile,
const
und einige würden sagen, dass sie nach Möglichkeit verwendet werden sollte, da sie absichtlich und indikativ ist.Soweit ich das beurteilen kann, ist es die indikativste und vorhersehbarste Deklaration von Variablen in JavaScript und eine der nützlichsten, weil sie so eingeschränkt ist. Warum? Weil es einige Möglichkeiten
var
undlet
Erklärungen beseitigt .Woraus können Sie schließen, wenn Sie a lesen
const
? Sie kennen alle folgenden Punkte, indem Sie dieconst
Deklarationsanweisung lesen UND ohne nach anderen Verweisen auf diese Variable zu suchen:Das folgende Zitat stammt aus einem Artikel , in dem die Vorteile von
let
und erläutert werdenconst
. Außerdem wird Ihre Frage zu den Einschränkungen / Grenzen des Keywords direkter beantwortet:Quelle: https://ponyfoo.com/articles/var-let-const
quelle