我可以完全停止使用var吗?

7 javascript ecmascript-6

我正在学习Java课程,所有声明都使用block scope(int, double, boolean, etc.).然而,在JavaScript中var是函数范围.

let在ES6中出现并给了JS开发人员阻止范围.我正在调整我的编码风格,我选择一起摆脱var所有.

这个可以吗?

T.J*_*der 7

这个可以吗?

大多; 可能完全.在少数情况下,您希望使用var而不是let/ const出于技术(而不是样式)的原因:

  • 如果你想宣布成为全球对象的属性的全局变量(全局let,constclass创建全局变量,但它们不会成为全局对象的属性).

    当然,您可以使用this.varName = ...而不是var varName,因为this在全局范围内,¹是全局对象.

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

    var MyApp = MyApp || {};
    MyApp.something = /*...*/;
    
    Run Code Online (Sandbox Code Playgroud)

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

    当然,您现在可能正在使用新的模块格式.:-)如果你不是,你又能做到

    this.MyApp = this.MyApp || {};
    MyApp.something = /*...*/;
    
    Run Code Online (Sandbox Code Playgroud)

    在全球范围内.¹

[有使用是一个小的性能的好处是用var,而不是let在其中它被用来作为一个循环计数器的功能.最近版本的现代浏览器只是删除了这个小的好处(而且它无论如何都很小).


¹请注意,模块中的顶级代码(ES2015模块,Node.js模块,大多数捆绑器......)不在全局范围内.它在模块范围内.另请注意,在ES2015模块的顶层,this具有该值undefined.


wua*_*min 5

如果您仅针对支持 ES6 的平台,请采用 let 和 const。停止使用变量。