Javascript:如何使用const

时间:2017-04-08 20:27:55

标签: javascript node.js ecmascript-6

我不了解现代Javascript的一件事。我看到很多人在讨论是否应该在需要新模块时使用varconstlet。大多数人都说它const是他们的首要任务,let秒,但我没有看到很多人忠于var。但是,下面的代码会引发error TS2451: Cannot redeclare block-scoped variable 'other'错误。 (注意:此错误来自Typescript编译器,使用commonjs标志。)

main.js

'use strict';

const A = require('./A.js');
const B = require('./B.js');

// do more stuff

A.js

'use strict';
const other = require('./other.js');

class A {
    //...
};

module.exports = A;

B.js

'use strict';
const other = require('./other.js');

class B {
    //...
};

module.exports = B;

我不确定在哪些情况下使用const时没有错误。它似乎只有在使用const在主模块中导入模块时才有效,然后其他模块中的所有其他模块都有var来导入同一模块。我想知道我是否遗漏了什么。感谢。

修改

这是我的一个模块的代码。当我将顶部的var更改为const时,错误就会开始。我还在其他互连的模块中定义了相同的导入。

var Datastore = require('nedb');
var validate = require("validate.js");
var path = require('path');


module.exports = class Planet{

    private db_filename : string  = "db/planets.db";

    private ds;

    private static instance : Planet = null;

    private constructor(){      
    }


    init(db_filename : string) : Planet{
        this.ds = new Datastore({ filename: db_filename, autoload: true, timestampData: true });
        return this;
    }


    static get_instance() : Planet{
        if(this.instance == null)
            this.instance = new Planet();
        return this.instance;
    }

}

1 个答案:

答案 0 :(得分:2)

一般来说:您可以重新定义用var定义的变量,不能使用const / let-defined变量。您应该始终使用const,因为如果您不小心重新定义变量,它会抛出错误(如您所见)。如果您需要稍后修改变量,则必须降级以允许。

// works
var a = 1;
var a = 2;

// error (because var a is defined above)
let a = 1;

let b = 1;
// error (because let b is defined above)
let b = 2;

// error
const b = 1;
// error
const a = 1;


const c = 1;
// error
const c = 2;
// error   
c = 2;

我不知道为什么你的typescript-compiler会抛出错误。使用普通的node.js测试它可以很好地工作。