Je suis intéressé de savoir s'il existe des limites aux types de valeurs pouvant être définis à l'aide const
de JavaScript - en particulier des fonctions. Est-ce valable? Certes, cela fonctionne, mais est-ce considéré comme une mauvaise pratique pour une raison quelconque?
const doSomething = () => {
...
}
Toutes les fonctions doivent-elles être définies de cette manière dans ES6? Il ne semble pas que cela ait pris de l'ampleur, si c'est le cas.
Merci pour vos commentaires!
javascript
function
const
ecmascript-6
David Sinclair
la source
la source
var doSomething = <function def>;
. 4) "Toutes les fonctions doivent-elles être définies de cette manière dans ES6?" Cela me semble compliqué. J'aime les déclarations de fonctions. Chacun son propre.const
. Voulez-vous vous empêcher de remplacer la fonction? Je suppose que vous connaissez votre code pour ne pas le faire de toute façon. Voulez-vous exprimer l'intention dedoSomething
, c'est-à-dire qu'il détient une fonction et ne change pas sa valeur? Je pense que les déclarations de fonction communiquent également clairement cette intention. Donc, si vous avez besoin d'une "protection à l'exécution" contre le remplacement, allez-y. Sinon, je ne vois pas beaucoup d'avantages. Bien sûr, si vous utilisiez principalementvar foo = function() {};
, j'utiliserais à laconst
place devar
.const
.Réponses:
Il n'y a aucun problème avec ce que vous avez fait, mais vous devez vous rappeler la différence entre les déclarations de fonction et les expressions de fonction.
Une déclaration de fonction, c'est-à-dire:
Est hissé entièrement au sommet de la lunette (et similaires
let
etconst
ils sont également à portée de bloc).Cela signifie que ce qui suit fonctionnera:
Une expression de fonction, c'est-à-dire:
Est-ce que la création d'une fonction anonyme (
function () {}
) et la création d'une variable, puis l'attribution de cette fonction anonyme à cette variable.Ainsi, les règles habituelles concernant le levage de variables dans une portée - les variables à portée de bloc (
let
etconst
) ne remontent pasundefined
au sommet de leur portée de bloc.Ça signifie:
Échouera car
doSomething
n'est pas défini. (Cela lancera unReferenceError
)Si vous passez à l'utilisation,
var
vous obtenez votre levée de la variable, mais elle sera initialisée pourundefined
que le bloc de code ci-dessus ne fonctionne toujours pas. (Cela lancera unTypeError
puisquedoSomething
n'est pas une fonction au moment où vous l'appelez)En ce qui concerne les pratiques standard, vous devez toujours utiliser l'outil approprié pour le travail.
Axel Rauschmayer a un excellent article sur la portée et le levage, y compris la sémantique es6: Variables et portée dans ES6
la source
function a(){console.log(this);}
et bconst a=_=>{console.log(this);}
est que si vous l'appelez commea.call(someVar);
, en a , il imprimerasomeVar
, en b , il imprimerawindow
.Bien que l'utilisation
const
pour définir des fonctions semble être un hack, mais cela présente de grands avantages qui le rendent supérieur (à mon avis)Cela rend la fonction immuable, vous n'avez donc pas à vous soucier de la modification de cette fonction par un autre morceau de code.
Vous pouvez utiliser la syntaxe de la grosse flèche, qui est plus courte et plus propre.
L'utilisation des fonctions fléchées s'occupe de la
this
liaison pour vous.exemple avec
function
même exemple avec
const
la source
function f(x, y) {
est de 18 caractères,const f = (x, y) => {
est de 21 caractères, donc 3 caractères de plus. 3. Conserver cette liaison n'a d'importance que si les fonctions sont définies dans une méthode (ou une autre fonction qui a un sens). Au plus haut niveau du script, c'est inutile. Je ne dis pas que vous vous trompez, mais simplement que les raisons que vous mentionnez ne sont pas très pertinentes.Cela fait trois ans que cette question a été posée, mais je viens de la rencontrer. Puisque cette réponse est si loin dans la pile, permettez-moi de la répéter:
J'ai été motivé pour faire des recherches après avoir observé un codeur JavaScript prolifique qui utilise toujours
const
Statement forfunctions
, même lorsqu'il n'y a aucune raison / avantage apparent.En réponse à " est-ce considéré comme une mauvaise pratique pour une raison quelconque? ", Permettez-moi de dire, l'OMI, oui, ou du moins, il y a des avantages à utiliser la
function
déclaration.Il me semble que c'est en grande partie une question de préférence et de style. Il y a quelques bons arguments présentés ci-dessus, mais aucun n'est aussi clair que dans cet article:
Confusion constante: pourquoi j'utilise toujours des déclarations de fonction JavaScript par medium.freecodecamp.org/Bill Sourour, gourou JavaScript, consultant et enseignant.
J'exhorte tout le monde à lire cet article, même si vous avez déjà pris une décision.
Voici les principaux points:
la source
defaultErrorHandler
const assigné comme une fonction anonyme que je peux ensuite appeler à partir des gestionnaires de promesses. Cela me permettrait éventuellement de «remplacer» ce gestionnaire d'erreurs par défaut dans les fonctions selon mes besoins. Certains doivent simplement renvoyer un objet d'erreur et d'autres doivent renvoyer une réponse http, avec des niveaux de verbosité variables. Pourtant, la structure du code peut être un modèle familier malgré tout..then( res.success, res.error )
beaucoup plus que les fonctions anonymes que je déclarais simplement appelerres.success(value);
. Avoir un.then( ..., defaultErrorHandler)
modèle commun pourrait être agréable, avec une fonction defaultErrorHandler définie au niveau supérieur, et éventuellement avoir uneconst defaultErrorHandler = error => { ... }
déclaration dans une portée de fonction comme vous le souhaitez.Il y a des avantages très importants à utiliser
const
et certains diraient qu'il devrait être utilisé dans la mesure du possible en raison de son caractère délibéré et indicatif.C'est, pour autant que je sache, la déclaration de variables la plus indicative et la plus prévisible en JavaScript, et l'une des plus utiles, EN RAISON de sa contrainte. Pourquoi? Parce qu'il élimine certaines possibilités
var
etlet
déclarations.Que pouvez-vous en déduire lorsque vous lisez un
const
? Vous savez tout ce qui suit simplement en lisant l'const
instruction de déclaration, ET sans rechercher d'autres références à cette variable:La citation suivante est tirée d' un article faisant valoir les avantages de
let
etconst
. Il répond également plus directement à votre question sur les contraintes / limites du mot-clé:Source: https://ponyfoo.com/articles/var-let-const
la source