let ,const, var 的区别?
- var定义的变量,可以跨块访问, 不能跨函数访问。
- let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
- const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改this指向
变量提升?
var
声明的变量存在变量提升(将变量提升到当前作用域的顶部)。即变量可以在声明之前调用,值为undefined
。
let
和const不
存在变量提升,否则报错。
块级作用域?
- 概念:
- ES5 中作用域有:全局作用域、函数作用域。没有块作用域的概念。
- ES6 中新增了块级作用域。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域
- var不存在块级作用域。
- let和const存在块级作用域。
重复声明变量?
var
允许重复声明变量。let
和const
在同一作用域不允许重复声明变量。
是否能修改声明的变量?
var
和let
可以。const
声明一个只读的常量。一旦声明,常量的值就不能改变。const
声明的变量不得改变值,这意味着,const
一旦声明变量,就必须立即初始化,不能留到以后赋值。
暂时性死区?
let和const存在暂时性死区
。即只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。