我(重新)学习Javascript,并建议我不要混用ES5和ES6类型的代码。但我的IDE,Webstorm,一直警告我,我应该在我的代码中使用 let 和 const - 有大量的黄色标记。当然我可以关闭那些警告,但是我应该在适当的时候总是使用 let 和 const ,即使我的其余代码目前是&# 34;旧学校" JavaScript的? (顺便说一句,我欢迎任何有关转换到ES6的最佳实践的链接/建议,即开始将ES6引入代码的最佳方式)。谢谢!
答案 0 :(得分:0)
问题的基本答案:否,在真正的ES5中不能使用let
和const
。您需要使用var
。补充说明一下:如果Webstorm发出了这些警告,但您在编写ES5,则您的设置是错误的。转到设置>语言和框架> Javascript,然后将Java语言版本更改为ECMAScript 5.1。如果您知道自己正在编写ES5,则不应将其设置为根据ES6规范来验证您的代码。
以下是一些其他信息:
最近,我一直在努力连接一个转译器(Babel),以便在生产环境中将所有Javascript转换为与ES5兼容的语法。如果要使用ES6语法,但仍需要支持不兼容ES6的浏览器(例如IE9-IE11),则需要像Babel这样的转换器。考虑到这一点,我想提出一些与let
和const
相关的特定注释。
在真实的ES6中,使用let
定义变量将在其块范围内创建它。这意味着一旦该块退出,该命名变量就会被丢弃。因此,可能会发生以下情况:
const x = 'I am a constant';
if (1 == 1) {
let x = 'Not here for long';
console.log(x); // => 'Not here for long'
}
console.log(x); // => 'I am a constant';
使用let
创建块范围内的x
实例时,此实例优先于此块内的const x
(在这种情况下为if语句)。 Babel将其转换为与ES5浏览器兼容的方法实际上很聪明:
var x = 'I am a constant';
if (1 == 1) {
var _x = 'Not here for long';
console.log(_x); // => 'Not here for long'
}
console.log(x); // => 'I am a constant';
正如您在此处看到的那样,它实际上创建了一个具有不同名称_x
的新var,因此它与原始x
不冲突。
最后的提示:如果您使用的是Promise
和Symbol
之类的新功能,那么编译器是不够的。您还需要为这些使用polyfill。