web-dev-qa-db-fra.com

const vs let lors de l'appel nécessite

Comme io.js maintenant prend en charge ES6 vous pouvez enfin utiliser les mots clés const et let. Évidemment, let est le successeur de var, juste avec quelques super-pouvoirs.

Mais qu'en est-il de const? Je sais, bien sûr, ce que signifie "constant", mais je me demandais quand l'utiliser (concernant les meilleures pratiques).

Par exemple, si je crée un module qui nécessite un autre module, je pourrais écrire:

'use strict';

const util = require('util');

const foo = function () {
  // Do something with util
};

module.exports = foo;

Fondamentalement, j'ai remplacé chaque occurrence de var par const. D'une manière générale, je pense que c'est correct, mais si je suis ce schéma, cela me laisse beaucoup plus d'utilisations de const que de let, car la plupart des variables ne sont pas des "variables" dans un sens littéral.

Est-ce que c'est du bon style? Dois-je plutôt opter pour let? Quand devrais-je choisir const plutôt que let?

41
Golo Roden

const peut normalement être utilisé lorsque vous ne voulez pas que votre programme

  1. pour attribuer quoi que ce soit à la variable

    "use strict";
    const a = 1;
    a = 2;
    

    produira TypeError: Assignment to constant variable..

  2. pour utiliser la variable sans initialiser explicitement.

    "use strict";
    const a;
    

    produira SyntaxError: Unexpected token ;

Autrement dit, je dirais,

  • utilisez const chaque fois que vous souhaitez que certaines variables ne soient pas modifiées

  • utilisez let si vous voulez exactement le contraire de const

  • utilisez var, si vous voulez être compatible avec les implémentations ES5 ou si vous voulez une portée de niveau module/fonction.

Utilisez let uniquement lorsque vous avez besoin de la portée au niveau du bloc, sinon l'utilisation de let ou var ne ferait aucune différence.

39
thefourtheye

J'ai le même sentiment que vous décrivez. Un grand pourcentage de variables déclarées dans mon code ont tendance à être constantes, même des objets et des tableaux. Vous pouvez déclarer des objets et des tableaux constants tout en étant en mesure de les modifier:

const arr = [];
arr.Push(1);
arr;
// [ 1 ]

const obj = {};
obj.a = 1;
obj;
// { a: 1 }

AFAIK modules ES6 ne nécessitent pas de déclarations de variables lors de l'importation, et je soupçonne que io.js se déplacera vers les modules ES6 dans un avenir proche .

Je pense que c'est un choix personnel. J'utiliserais toujours const lors de la demande de modules et pour les variables locales de module (foo dans votre exemple). Pour le reste des variables, utilisez const de manière appropriée, mais ne devenez jamais fou et utilisez const partout. Je ne connais pas les performances entre let et const donc je ne peux pas dire s'il est préférable d'utiliser const autant que possible.

7
Gabriel Llamas

Test de performances const vs let utilisation sur require pour Node.js 6.10:

require('do-you-even-bench')([
  { name: 'test 1', fn: function() { 
    const path = require('path');
    } 
  },
  { name: 'test 2', fn: function() { 
    let path = require('path');
    } 
  }
]);

test 1 .... 2 547 746,72 op/s
test 2 .... 2 570 044,33 op/s

3
rgwozdz