web-dev-qa-db-ja.com

requireを呼び出すときのconst vs let

Io.jsとして ES6をサポート 最終的に、constおよびletキーワードを使用できるようになりました。明らかに、letvarの後継であり、いくつかの超大国を持っています。

しかし、constはどうですか?もちろん、「定数」が何を意味するかは知っていますが、(ベストプラクティスに関して)いつ使用するのか疑問に思っていました。

たとえば、別のモジュールを必要とするモジュールを作成する場合、次のように書くことができます。

'use strict';

const util = require('util');

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

module.exports = foo;

基本的に、すべてのvarconstに置き換えました。一般的に言えば、これは大丈夫だと思いますが、このパターンに従うと、ほとんどの変数は文字通りの意味で「変数」ではないため、constよりもletの使用方法が多くなります。 。

これはいいスタイルですか? letを選ぶべきですか? constよりもletを選択する場合

41
Golo Roden

constは通常、プログラムが必要ない場合に使用できます。

  1. 変数に何かを割り当てる

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

    TypeError: Assignment to constant variable.を生成します。

  2. 明示的に初期化せずに変数を使用します。

    "use strict";
    const a;
    

    SyntaxError: Unexpected token ;を生成します

簡単に言えば、私は言うでしょう、

  • いくつかの変数を変更しない場合は、constを使用します

  • letの正反対が必要な場合はconstを使用します

  • eS5実装との互換性が必要な場合、またはモジュール/関数レベルのスコープが必要な場合は、varを使用します。

letは、ブロックレベルのスコープが必要な場合にのみ使用してください。そうでない場合は、letまたはvarを使用しても違いはありません。

39
thefourtheye

私はあなたが説明しているのと同じ感覚を持っています。私のコードで宣言された変数の大部分は、オブジェクトや配列でさえ一定である傾向があります。定数オブジェクトと配列を宣言しても、それらを変更できます。

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

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

AFAIK ES6モジュール インポート時に変数宣言を必要とせず、 io.jsは近い将来ES6モジュールに移行します と思われます。

これは個人的な選択だと思います。モジュールを必要とする場合、およびモジュールのローカル変数(例ではfoo)には常にconstを使用します。残りの変数については、constを適切に使用しますが、気を散らしてどこでもconstを使用しないでください。 letとconstの間のパフォーマンスがわからないため、可能な限りconstを使用する方が良いかどうかわかりません。

7
Gabriel Llamas

Node.js 6.10のconstでのパフォーマンステストlet vs requireの使用法:

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

テスト1 .... 2,547,746.72 op/s
テスト2 .... 2,570,044.33 op/s

3
rgwozdz