let和const不存在变量提升
想用let和const声明的变量,必须在声明的下方使用,在上边会有暂时性死区的错误
var let const三者有什么区别?
var可以重复声明 let和const不可以
var存在变量提升 let和const没有
var声明的变量会在window下增加一个对应的属性,let和const不会
var不识别块级作用域 let和const可以
function f(){
console.log(a)//undefined
var a = 12;
console.log(a)//12
}
f();
作用域
作用域就是代码能起作用的区域,是一块栈内存,分为全局作用域和私有作用域
全局作用域
页面一打开就会形成一个全局作用域,一个页面只有一个全局作用域,全局作用域声明的变量我们称为全局变量
私有作用域
在函数执行的时候会形成一个私有的作用域,私有作用域声明的变量我们称为私有变量,形参也是私有变量
块级作用域
指的是判断句、循环句的大括号包起来的部分,是es6新增的,只有let和const声明的变量可以识别块级作用域,对于var不存在块级作用域一说
上级作用域
函数执行时形成的那个私有作用域,一般都会有一个上级作用域,私有作用域的上级作用域是谁,跟这个函数在哪里执行没有关系,只跟这个函数在哪里定义的有关系