1.块级作用域 ES5只有全局作用域和函数作用域,没有块级作用域,ES6新增了let命令用于声明变量,类似于var但是let声明的变量只能在let命令所在的代码块内有效。 2.变量提升 var定义的变量会发生变量提升现象,即变量可以在申明之前被使用,值为undefined,let命令定义的变量必须在声明明之后使用,否则报错 脚本开始运行时,变量foo已经存在了,但是没有值,所以会输出undefined。变量bar用let命令声明,不会发生变量提升。这表示在声明它之前,变量bar是不存在的,这时如果用到它,就会抛出一个错误。 3.重复声明,var可以重复声明,let不可以重复声明