在javascript es6中,提到了一个新的概念,叫块级做用域,块级做用域就是用大括号包起来的来的代码块。javascript
let,const是块级元素,var是局部做用域(局部做用域是function函数里可见),let和const的区别见以下代码段java
function varTest() { var x = 1; if (true) { var x = 2; // same variable! console.log(x); // 2 } console.log(x); // 2 } function letTest() { let x = 1; if (true) { let x = 2; // different variable console.log(x); // 2 } console.log(x); // 1 }
const与let的区别在于const是它是不变的,而let是可变的。es6
可是对于const只是对于基本数据类型的值或者是引用数据类型的引用对象是不可变的,而引用对象里面的属性依然是可变的,若是想要引用对象里面的属性值都不可见怎么办呢?能够使用Object.freeze(),使用方法以下:函数
const wes = Object.freeze(person);
在全局做用域中,var会自动建立为一个全局对象(window)的属性,而let不会,相关代码以下this
var x = 'global'; let y = 'global'; console.log(this.x); // "global" console.log(this.y); // undefined
let不容许重定义,不容许先使用,后定义,相关代码以下code
let foo; let foo; // SyntaxError thrown.
console.log(foo); // ReferenceError let foo = 2;
想快速了解更多的Javascript es6新特性,请点击以下连接:http://es6-features.org/对象