const vs let在调用require时

Gol*_*den 41 javascript node.js ecmascript-6 io.js

由于io.js现在支持ES6,因此您终于可以使用constlet关键字.显然,letvar一些超级大国的继承者.

但那怎么样const?我知道,当然,"常数"意味着什么,但我想知道何时使用它(关于最佳实践).

例如,如果我创建一个需要另一个模块的模块,我可以写:

'use strict';

const util = require('util');

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

module.exports = foo;
Run Code Online (Sandbox Code Playgroud)

基本上我把它换成的每一次出现varconst.总体来说,我认为这是好的,但如果我遵循这个模式,它给我留下的方式更多的用途constlet,因为大多数变量是不是"变量"在字面意义上.

这是好风格吗?我应该宁愿去let吗?我什么时候应该选择constlet

the*_*eye 38

const 当你不想要你的程序时,可以正常使用

  1. 为变量分配任何东西

    "use strict";
    const a = 1;
    a = 2;
    
    Run Code Online (Sandbox Code Playgroud)

    会产生TypeError: Assignment to constant variable..

  2. 在没有显式初始化的情况下使用变量.

    "use strict";
    const a;
    
    Run Code Online (Sandbox Code Playgroud)

    会产生 SyntaxError: Unexpected token ;

简单地说,我会说,

  • 使用const时,你想要一些变量不被修改

  • let如果你想要完全相反的话,请使用const

  • 使用var,如果你想与ES5实现,或者如果你想模块/功能水平范围相适应.

使用let只有当你需要块级别的作用域,以其他方式使用letvar不会作出任何区别.

  • 实际上,`let`和`const`确实提升了,但它有点复杂:http://stackoverflow.com/q/31219420/3242070 (3认同)

Gab*_*mas 7

我有同样的感觉,你在描述.在我的代码中,很大比例的声明变量往往是常量,甚至是对象和数组.您可以声明常量对象和数组,但仍然可以修改它们:

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

const obj = {};
obj.a = 1;
obj;
// { a: 1 }
Run Code Online (Sandbox Code Playgroud)

导入时AFAIK ES6模块不需要变量声明,我怀疑io.js将在不久的将来转移到ES6模块.

我认为这是个人选择.在需要模块和模块局部变量时(foo在你的例子中)我总是使用const .对于其余的变量,请适当地使用const,但不要发疯并在任何地方使用const.我不知道let和const之间的性能所以我不知道是否最好尽可能使用const.