javaScript/js知识梳理与面试题

一. 执行上下文

当 JS 引擎执行代码前,它会扫描所有的代码(并不是执行代码)

(1)第一次扫描:创建快照(预解析)

  1. 建立环境记录(类似分类):
  • 扫描所有 function 关键字,把整个函数体存进去(函数提升)。
  • 扫描所有 var 声明,给它们分配内存并初始化为 undefined变量提升)。
  • 识别 letconst,虽然也记录了它们,但标记为"不可访问"(暂时性死区)。

面试总结:所谓的暂时性死区 (TDZ) 和变量提升,其实在js引擎第一次扫描代码的时候就已经决定了。

变量类型 分类时的动作 (Creation Phase) 内存状态 访问结果
var 创建并初始化 已经分配了内存,并填入了 undefined 作为默认值。 可以访问(返回 undefined)。
let / const 仅创建(注册) 内存地址已被预留 ,但引擎严禁对其进行任何形式的访问(甚至不给 undefined)。 报错(ReferenceError)。

2.确定作用域链(Scope Chain):拍下照片时,引擎会记下这个函数是在哪里定义的,确定它的"父级"是谁。

相关推荐
xyq202410 分钟前
过滤器模式
开发语言
freejackman13 分钟前
Java从0到1---基础篇
java·开发语言·后端·idea
CQU_JIAKE17 分钟前
4.4【Q】
java·前端·javascript
2301_7717172119 分钟前
Java自定义注解创建详解
java·开发语言
小陈工23 分钟前
Python Web开发入门(十二):使用Flask-RESTful构建API——让后端开发更优雅
开发语言·前端·python·安全·oracle·flask·restful
木斯佳23 分钟前
前端八股文面经大全:字节前端一面(2026-04-03)·面经深度解析
前端·面试题·面经
艾莉丝努力练剑25 分钟前
【Linux系统:信号】线程安全不等于可重入:深度拆解变量作用域与原子操作
java·linux·运维·服务器·开发语言·c++·学习
笑鸿的学习笔记25 分钟前
Qt与CMake笔记之option、宏传递与Qt Creator项目设置
开发语言·笔记·qt
楼田莉子26 分钟前
同步/异步日志系统:日志的工程意义及其实现思想
linux·服务器·开发语言·数据结构·c++
无心水26 分钟前
20、Spring陷阱:Feign AOP切面为何失效?配置优先级如何“劫持”你的设置?
java·开发语言·后端·python·spring·java.time·java时间处理