最常用的ES6特性
let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arguments
let, const
这两个的用途与var
类似,都是用来声明变量的,但在实际运用中他俩都有各自的特殊用途。
首先来看下面这个例子:
var name = 'aiba'
while (true) {
var name = 'aiba'
console.log(name) //aiba
break
}
console.log(name) //aiba
使用var
两次输出都是aiba,这是因为ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。第一种场景就是你现在看到的内层变量覆盖外层变量。而let
则实际上为JavaScript新增了块级作用域。用它所声明的变量,只在let
命令所在的代码块内有效。
let name = 'niu'
while (true) {
let name = 'obama'
console.log(name) //obama
break
}
console.log(name) //niu
另外一个var
带来的不合理场景就是用来计数的循环变量泄露为全局变量,看下面的例子:
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
const
也用来声明变量,但是声明的是常量。一旦声明,常量的值就不能改变。
const PI = Math.PI
PI = 23 //Module build failed: SyntaxError: /es6/app.js: "PI" is read-only
当我们尝试去改变用const声明的常量时,浏览器就会报错。
const有一个很好的应用场景,就是当我们引用第三方库的时声明的变量,用const来声明可以避免未来不小心重命名而导致出现bug:
const monent = require('moment')