我正在学习Java课程,所有声明都使用block scope(int, double, boolean, etc.).然而,在JavaScript中var是函数范围.
let在ES6中出现并给了JS开发人员阻止范围.我正在调整我的编码风格,我选择一起摆脱var所有.
这个可以吗?
这个可以吗?
大多; 可能完全.在极少数情况下,您希望使用var而不是let/ const出于技术(而不是样式)的原因:
如果你想宣布成为全球对象的属性的全局变量(全局let,const和class创建全局变量,但它们不会成为全局对象的属性).
当然,您可以使用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.
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |