简单概念
- 作用域 存放变量的空间,使变量不用外泄
- 词法作用域 根据源代码来决定的作用域
- 块作用域 花括号以内空间关键字声明let,const
- 作用域链 可以往外层找到父词法作用域
- 调用堆栈 栈结构,函数调用会把函数地址记录到栈中返回弹出
- 变量提升 变量跟函数声明会提升到顶部,如果大学学过c语言会发现,c语言是调用必需要在声明前面,js做了特殊处理
- 执行上下文 JavaScript 代码被解析和执行时所在环境的抽象概念
- 闭包 在函数里边的声明的函数调用时候可以记住外层函数的环境变量
变量提升现象
js运行一段代码做了两部操作
- 第一步 解析声明然后把声明记录起来,等同于把变量名存储起来然后赋值为undefined
- 第二部 执行代码,这时候先与声明调用这个值是undefined
闭包现象
外层函数调用时候里层函数根据词法作用域找到父作用域并且记录,然后调用时后引用父作用域。