关于javascript:我可以完全停止使用var吗?

Can I completely stop using var?

我正在学习Java课程,所有声明都使用块范围(EDCOX1,0)。但在javascript中,var是功能范围。

let在es6中出现,给了JS开发人员块范围。我正在调整我的编码风格,并选择一起摆脱var

这样行吗?


Is this O.K.?

大部分;可能全部。由于技术(而非风格)原因,很少有您想使用var而不是letconst的情况:

  • 如果要声明成为全局对象属性的全局变量(global letconstclass创建全局变量,但它们不成为全局对象的属性)。

    当然,您可以使用this.varName = ...而不是var varName,因为全局scope1的this是全局对象。

  • 如果您希望有多个文件,其中任何一个文件都可能是"第一个"(但不是最后一个)来定义相同的全局文件,就像旧模块格式中常见的那样,例如:

    1
    2
    var MyApp = MyApp || {};
    MyApp.something = /*...*/;

    这是因为,如果已声明MyApp,则默认忽略var MyApp部分;如果已在当前范围内声明标识符,则使用let的等效结构将失败,因为无法使用该结构。

    当然,您现在可能正在使用一种新的模块格式。:-)如果你没有,你也可以这样做。

    1
    2
    this.MyApp = this.MyApp || {};
    MyApp.something = /*...*/;

    在全球范围内。1

[在用作循环计数器的函数中,使用var而不是let,过去有一个较小的性能优势。现代浏览器的最新版本几乎都删除了这一小好处(但它还是很小的好处)。]

1请注意,模块中的顶级代码(ES2015模块、node.js模块、大多数bundler…)不在全局范围内。它在模块范围内。另请注意,在ES2015模块的顶层,this的值为undefined


如果只针对支持ES6的平台,则采用let和const。停止使用VAR。