我可以防止意外覆盖TypeScript / JavaScript中的局部变量吗?

时间:2015-04-23 13:16:19

标签: javascript typescript local-variables

今天我浪费了一个小时来调试一个简单的问题,其中一个名为server的局部变量正在被初始化和配置 - 然后,在同一文件的最后一行中,意外地重新声明了它,例如,通过另一个var server = ...语句,有效地创建名为server new 变量,从而导致前一个变量超出范围;然而,因为它们是相同类型的变量,具有相同的名称,所以其他一切继续工作,这使得调试相当困难。

是否存在TypeScript或JavaScript语言功能,可防止此类事件发生?

我的想法是,在同一范围内声明两个具有相同名称的变量,根本不应该被允许。

也许有一个短绒或一些质量保证工具能够检查和防止这类事情? (也许还有其他“坏”模式?)

2 个答案:

答案 0 :(得分:6)

尽可能使用let

在声明之前不能使用var x = 3; function f() { console.log(x); // ReferenceError, x is not defined let x = 5; } 变量:

{{1}}

答案 1 :(得分:2)

两个选项:

  1. 使用ECMA Script 6和let
  2. jslintvar一起使用。
  3. There is a closed issue about this on the GitHub/Microsoft/Typescript页面。建议定位ECMA脚本6并使用let

    带有let

    的ECMA脚本6

    In ECMA Script 6 this would create an error

    let x = "foo";
    let x = "bar"; // TypeScript with ECMA 6 will complain here
    console.log(x);
    
      

    重复声明,x

    var

    的JSLint

    此外,though the following won't throw a TypeScript error jslint工具会抱怨它,即使您没有使用严格。

    (function () {
    
        var x, y;
        x = "foo";
        y = "foo";
    
        function sayMsg() {
            // jslint will complain here
            var y = "bar";
        }
    
        sayMsg();
    
        // jslint will also complain here
        var x = "bar" + y;
    
    }());
    

    这是jslint告诉你的内容:

      

    重新定义' y'从第3行开始。

         

    将此与之前的' var'相结合。言。