图片说明
var与 let的区别:

var:函数作用域;存在变量提升;可重复定义;声明的变量会作为window的属性。

let:块级作用域;不存在变量提升(有暂时性死区);不可重复定义;声明的变量不会作为window的属性。

块级作用域:即在{}花括号内的域,由{ }包括,比如if{}块、for(){}块。

函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的。

暂时性死区:在代码块中,在声明变量之前,该变量是不可用的。

JS中作用域有:全局作用域、函数作用域,是没有块作用域的。块级作用域是ES6中的。