Q1主动回忆难度 1
1/10
JavaScript 核心 · 作用域与闭包
记忆强度
变量提升、执行上下文、作用域链、闭包——这条链子上任何一环讲不清都会被追问穿。
JavaScript 核心 · 作用域与闭包
闭包保留了对父级作用域变量对象的引用,使内部变量可被外部间接访问且不会被回收。
fun3 保留了对 fun1 作用域的引用,调用时沿作用域链找到 a,因此输出 2。
定时器回调在循环结束后执行,并共同读取已变为 6 的全局变量 i,所以输出 5 个 6。
函数上下文入栈后成为活动上下文并挂起全局上下文,执行完出栈,再由全局上下文继续执行。
创建 VO 时函数整体被存入内存,而 var 变量仅声明并赋为 undefined,因此执行阶段可提前访问。
函数名被保存为辅助对象的只读属性并置于内部作用域链前端,因此赋值无效且不会触及外部变量。
创建阶段保存完整函数并将变量初始化为 undefined,执行阶段才依次运行代码和完成赋值。
调用会执行后声明的函数并输出 call b second。
变量从当前执行上下文逐层向外查找,链首是当前变量对象,链尾是全局对象。
let 变量声明前不可使用,声明后仅在所在代码块内可访问,块外访问会报错。