簡體   English   中英

我可以防止意外覆蓋TypeScript / JavaScript中的局部變量嗎?

[英]Can I prevent accidental overwrite of local variables in TypeScript / JavaScript?

今天我浪費了一個小時來調試一個簡單的問題,其中一個名為server的局部變量正在初始化和配置 - 然后,在同一文件的最后一行中,意外地重新聲明它,例如由另一個var server = ...聲明,有效地創建一個名為server變量,從而導致前一個變量超出范圍; 然而,因為這些是相同類型的變量,具有相同的名稱,所以其他一切繼續工作,這使得調試相當困難。

是否有TypeScript或JavaScript語言功能,可以防止這種情況?

我的想法是,在同一范圍內聲明兩個具有相同名稱的變量,根本不應該被允許。

也許有一個短絨或一些質量保證工具,有能力檢查和防止這種事情? (也許還有其他“壞”模式?)

盡可能使用let

在聲明聲明之前不能使用let變量:

var x = 3;
function f() {
  console.log(x); // ReferenceError, x is not defined
  let x = 5;
}

兩種選擇:

  1. 使用ECMA Script 6並let
  2. 使用帶有var jslint

在GitHub / Microsoft / Typescript頁面上有一個關於此的已關閉問題 建議是以ECMA Script 6為目標並使用let

ECMA Script 6 with let

在ECMA Script 6中,這會產生錯誤

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

重復聲明,x

帶有var JSLint

此外, 雖然以下內容不會引發TypeScript錯誤 ,但即使您沒有使用strict, 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會告訴你的:

從第3行重新定義'y'。

將其與之前的'var'語句相結合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM