变量提升和函数提升
变量声明提升通过var定义(声明)的变量,在定义语句之前就可以访问到值:undefined
函数声明提升通过function声明的函数,在之前就可以直接调用值:函数定义(对象)
函数声明在变量声明前面但是,取值覆盖要看谁最后赋值。
执行上下文
执行上下文对象包括全局和函数即eval三种,全局是在浏览器打开时会压入执行栈的最下部,等浏览器关闭后弹出,只有一个。
函数执行上下文:存在无数个,只有在函数被调用的时候才会被创建,每次调用函数都会创建一个新的执行上下文。
执行上下文对象有n+1个n是函数调用次数
由执行上下文栈管理执行上下文。
每次调用进栈,在调用结束时弹出.
栈的特点先进后出
作用域和作用域链
他是一块地盘,一段代码所在的区域,是在代码编写时确定的静态的(不同于上下文对象)。在代码编写时就确定了。
分类:全局作用域 函数作用域 块作用域(ES6)
作用:不同区域同名变量不冲突。隔离变量。
作用域链,会逐级查找变量