我正在学习Java课程,所有声明都使用块范围(int, double, boolean, etc.
)。但是在JavaScript中,var
是函数范围。
let
,并为JS开发人员提供了阻止范围。我正在调整我的编码风格,并选择一起摆脱var
。
这是O.K吗?
答案 0 :(得分:7)
这是O.K吗?
晴;可能完全。 非常 几种情况下,您希望使用var
代替let
/ const
进行技术(而不是样式)原因:
如果要声明一个全局变量,该变量将成为全局对象的属性(全局let
,const
和class
创建全局变量,但它们不会成为全局对象的属性。)
当然,您可以使用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。