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

时间:2018-05-14 17:00:43

标签: javascript ecmascript-6

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

ES6中出现了{p> let,并为JS开发人员提供了阻止范围。我正在调整我的编码风格,并选择一起摆脱var

这是O.K吗?

2 个答案:

答案 0 :(得分:7)

  

这是O.K吗?

晴;可能完全。 非常 几种情况下,您希望使用var代替let / const进行技术(而不是样式)原因:

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

    当然,您可以使用this.varName = ...代替var varName,因为全局范围内的this是全局对象。

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

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

    这是有效的,因为如果var MyApp已经被声明,MyApp部分会被默默忽略;具有let的等效结构将失败,因为如果已在当前范围中声明了标识符,则无法使用它。

    当然,您现在可能正在使用新的模块格式。 :-)如果你不是,你可以再做一次

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

    在全球范围内.¹

[使用在将其用作循环计数器的函数中使用var代替let是一个小的性能优势。最近版本的现代浏览器只是删除了这个小的好处(而且它还很小)。]

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

答案 1 :(得分:4)

如果您只定位支持ES6的平台,请采用let和const。停止使用var。