Подтвердить что ты не робот

Const vs let при вызове вызова

Так как теперь io.js поддерживает ES6, вы наконец можете использовать ключевые слова const и let. Очевидно, что let является преемником var, только с некоторыми сверхсилами.

Но как насчет const? Я знаю, конечно, что означает "постоянный", но мне было интересно, когда его использовать (относительно лучших практик).

Например, если я создаю модуль, который требует другого модуля, я мог бы написать:

'use strict';

const util = require('util');

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

module.exports = foo;

В основном я заменил каждое событие var на const. Вообще говоря, я думаю, что это нормально, но если я последую этому шаблону, это оставляет мне больше возможностей использования const, чем let, так как большинство переменных не являются "переменными" в буквальном смысле.

Это хороший стиль? Должен ли я лучше пойти за let? Когда следует выбрать const над let?

4b9b3361

Ответ 1

const может быть обычно использован, когда вы не хотите, чтобы ваша программа

  • назначить что-либо переменной

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

    создаст TypeError: Assignment to constant variable..

  • использовать переменную без явной инициализации.

    "use strict";
    const a;
    

    создаст SyntaxError: Unexpected token ;

Проще говоря, я бы сказал,

  • используйте const, когда вы хотите, чтобы некоторые переменные не были изменены

  • используйте let, если вы хотите, чтобы полная противоположность const

  • используйте var, если вы хотите быть совместимым с реализациями ES5 или хотите обладать уровнем уровня модуля/функции.

Используйте let только в том случае, если вам требуется определение уровня блока, иначе использование let или var не имеет никакого значения.

Ответ 2

У меня такое же чувство, что вы описываете. Большой процент объявленных переменных в моем коде, как правило, является постоянным, даже объектами и массивами. Вы можете объявлять постоянные объекты и массивы и все еще иметь возможность их изменять:

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

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

AFAIK Модули ES6 не требуют декларации переменных при импорте, и я подозреваю, что io.js переместится в модули ES6 в ближайшем будущем.

Я думаю, что это личный выбор. Я всегда использовал const, когда вам нужны модули и локальные переменные модуля (foo в вашем примере). Для остальных переменных используйте const соответствующим образом, но никогда не сходите с ума и не используйте const везде. Я не знаю производительность между let и const, поэтому я не могу сказать, лучше ли использовать const, когда это возможно.

Ответ 3

Тест производительности const vs let для использования require для 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
тест 2.... 2,570,044,33 оп/с

Ответ 4

LET V/S CONST

Разница

  • Большая разница между let и const заключается в том, что попытка назначить ранее определенную константу вызовет ошибку как в строгих, так и в нестрогих режимах.

Сходство

  • Подобно let, ошибка возникает при создании объявления const с идентификатором для уже определенной переменной в той же области видимости.

Например:

var message = "Hello!";
let age = 25;

// Each of these would cause an error given the previous declarations
const message = "Goodbye!";
const age = 30;
  • Константы - это также объявления уровня блока, похожие на let. Это означает, что константы уничтожаются, когда выполнение выполняется из блока, в котором они были объявлены, и объявления не поднимаются в верхнюю часть блока.