今天我浪费了一个小时来调试一个简单的问题,其中一个名为server
的局部变量正在被初始化和配置 - 然后,在同一文件的最后一行中,意外地重新声明了它,例如,通过另一个var server = ...
语句,有效地创建名为server
的 new 变量,从而导致前一个变量超出范围;然而,因为它们是相同类型的变量,具有相同的名称,所以其他一切继续工作,这使得调试相当困难。
是否存在TypeScript或JavaScript语言功能,可防止此类事件发生?
我的想法是,在同一范围内声明两个具有相同名称的变量,根本不应该被允许。
也许有一个短绒或一些质量保证工具能够检查和防止这类事情? (也许还有其他“坏”模式?)
答案 0 :(得分:6)
尽可能使用let
。
在声明之前不能使用var x = 3;
function f() {
console.log(x); // ReferenceError, x is not defined
let x = 5;
}
变量:
{{1}}
答案 1 :(得分:2)
两个选项:
let
。var
一起使用。 There is a closed issue about this on the GitHub/Microsoft/Typescript页面。建议定位ECMA脚本6并使用let
。
let
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
此外,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'相结合。言。