javascript - 我可以完全停止使用 var 吗?
问题描述
我正在学习 Java 课程,所有声明都使用块作用域(int, double, boolean, etc.
)。然而,在 JavaScript 中var
是函数范围。
let
在 ES6 中出现并为 JS 开发人员提供了块范围。我正在调整我的编码风格,并选择一起摆脱var
所有这些。
这个可以吗?
解决方案
这个可以吗?
大多; 可能完全。出于技术(而不是风格)原因,在极少数情况下您希望使用/来var
代替:let
const
如果要声明一个成为全局对象属性的全局变量(global
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
.
推荐阅读
- javascript - jquery data-id 没有按预期工作
- swift - 使用协议初始化器初始化类类型
- php - 网页在 Chrome 移动设备(Android)上无法正确显示
- vba - 无法将项目安排到预期位置
- html - 我正在处理的网站在 chrome 调试器(和我的 android 手机)中没有响应,但在 Firefox 调试器中运行良好。我需要帮助修复它
- debugging - LLDB 符号转储
- c++ - CreateFile 异常安全吗?
- javascript - 将用户重定向回我的主页后如何显示成功消息?
- version-control - TFVC 和将分支转换为文件夹的后果
- matlab - 如何同时去另一轮两个循环?