javaScript/js知识梳理与面试题

一. 执行上下文

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

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

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

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

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

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

相关推荐
cm04Z9c9112 小时前
C#摸鱼实录——IoC与DI案例详解
开发语言·c#
omnijk12 小时前
前端工程化
前端
做前端的娜娜子13 小时前
前端必看!我把一段"能跑不敢动"的报表代码用 AI 重构成了组件(附完整 Prompt)
前端·ai编程
柚yuzumi13 小时前
变量明明定义了,为什么访问不到?深入理解 JavaScript 作用域
javascript
long31613 小时前
Java 新手入门与实战开发指南
java·开发语言
hunterandroid13 小时前
[鸿蒙从零到一] ArkUI 动画与转场实战:状态驱动、组件过渡与页面衔接
前端
何时梦醒13 小时前
React + TypeScript + Vite 实战:从零构建 Color Picker 应用
前端·javascript·架构
摩西蒙13 小时前
计算机网络
开发语言·计算机网络·php
谁在黄金彼岸13 小时前
Nuxt.js 详解(一):Vue 开发者为什么要关注 Nuxt
前端