es6中的let 和const

let块级作用域
var name = 'zach' //ES3写法

while (true) {
    var name = 'obama'
    console.log(name)  //obama
    break
}
console.log(name)  //obama

只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。
看一下es6

let name = 'zach'

while (true) {
    let name = 'obama'
    console.log(name)  //obama
    break
}

console.log(name)  //zach

let则实际上为JavaScript新增了块级作用域。用它所声明的变量,只在let命令所在的代码块内有效。

另外一个var带来的不合理场景就是用来计数的循环变量泄露为全局变量,看下面的例子:
var a = [];
for (var i = 0; i < 10; i++) {
    a[i] = function () {
        console.log(i);
    };
}
a[6](); // 10

for (let i = 0; i < 10; i++) { //避免了上述问题
    a[i] = function () {
        console.log(i);
    };
}
a[6](); // 6
二、const

const也用来声明变量,但是声明的是常量。一旦声明,常量的值就不能改变。

 const PI = Math.PI

PI = 23 //Module build failed: SyntaxError: /es6/app.js: "PI" is read-only

const有一个很好的应用场景,就是当我们引用第三方库的时声明的变量,用const来声明可以避免未来不小心重命名而导致出现bug:例如:

  const monent = require('moment')

es6还有很多精彩之处,接下来还会陆续介绍。es8也已经发布了,js真是牛!时间都阻挡不了它的爆发! 哈哈哈哈哈

你可能感兴趣的:(es6中的let 和const)