是否存在变量提升?
var声明的变量存在变量提升(将变量提升到当前作用域的顶部)。即变量可以在声明之前调用,值为undefined。 let和const不存在变量提升。即它们所声明的变量一定要在声明后使用,否则报ReferenceError错。
是否存在暂时性死区?
let和const存在暂时性死区
console.log(code) // ReferenceError
let code = 'code'
区别
-
var 是
ES5提出,let与const是ES6提出 -
let和var声明的是变量,声明之后可以更改,const声明引用类型可以更改
-
var声明的变量存在变量提升(将变量提升到当前作用域的顶部)。即变量可以在声明之前调用,值为undefined。let和const不存在变量提升。即它们所声明的变量一定要在声明后使用,否则报ReferenceError错。
-
var不存在块级作用域。let和const存在
块级作用域。ES5中作用域有:全局作用域、函数作用域。没有块作用域的概念。ES6(简称ES6)中新增了块级作用域。块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。