现在我们可以编写ES6并将其部署到浏览器(使用Traceur或6to5来支持旧版用户代理),我们有什么理由不使用let
或const
作为变量声明的默认关键字?
var
已经死了吗?如果是,我可以配置我的linting工具来拒绝吗?
答案 0 :(得分:2)
因为es5只有变量的函数范围,所以你的转换器可能是为了模拟let关键字的功能而创建闭包。如果您在非函数范围内声明变量(例如循环,ifs等),则可能会影响代码的结果大小。所以这是目前没有的一个原因。它也可能使调试稍微混乱,尽管可以使用源映射来缓解这种情况。
还有其他任何缺点。对于来自其他语言的人来说,可变提升非常令人困惑,使用let可以避免这种潜在的打嗝。所以如果可以,我现在就用它。
答案 1 :(得分:0)
这取决于您的环境:
如果您正在编写服务器端JavaScript代码(Node.js),则可以安全地使用let
语句。
如果您正在编写客户端JavaScript代码并使用像Traceur这样的转换程序,则可以安全地使用let
语句,但是您的代码可能不是最佳选择表现。
如果您正在编写客户端JavaScript代码并且不使用转换器,则需要考虑浏览器支持。
今天,2016年2月23日,这些是一些不支持let
或只有部分支持的浏览器:
有关哪些浏览器在您阅读此答案时支持let语句的最新概述,请参阅this Can I Use
page。
答案 2 :(得分:0)
有时,let
不允许指定的功能提升模式。它在Chrome 51中有效,但在Safari 9.1.1中没有。因此,
let foo = func;
function func () {
return true;
}
会抛出错误。以下样式有效:
var foo = func;
function func () {
return true;
}
根据您的目的,这可能会使您的代码具有或多或少的可读性。例如,曝光模块模式具有大量初始化代码,因此不会立即返回。
var foo = (function () {
let factory = {
func: func
};
init();
// do more init stuff
return factory;
function func () {
//
}
}());
Using function declarations to hide implementation details, for example