JavaScript中函数声明位置对解析器预编译的影响

函数声明会被完整提升,包括函数名和函数体;函数表达式仅变量名提升,赋值不提升;块级函数声明行为不统一,严格模式下受TDZ约束;箭头函数和class声明不享受函数声明式提升。JavaScript中函数声明会被提升(hoisting),但提升行为与声明位置密切相关------不是所有函数都能被完全提升,关键看它是函数声明还是函数表达式。函数声明会被完整提升使用 function 关键字直接声明的函数(即函数声明语句),在预编译阶段会被整体提升到当前作用域顶部,包括函数名和函数体。这意味着即使调用写在声明之前,也能正常执行。? 正确示例:console.log(add(2, 3)); // 5<br>function add(a, b) { return a + b; } 解析器在进入作用域时就扫描并注册了 add,所以调用无报错。函数表达式只提升变量名,不提升赋值如果函数是通过 var/let/const 声明并赋值为函数(即函数表达式),则只有变量声明部分被提升,而函数体不会被提升。是否可调用,取决于变量声明方式:?? var 声明:变量名提升,值为 undefinedconsole.log(foo()); // TypeError: foo is not a function<br>var foo = function() { return 'hello'; }; ? let/const 声明:存在暂时性死区(TDZ)console.log(bar()); // ReferenceError<br>let bar = () => 'world';块级作用域中的函数声明行为有差异在 {} 块内使用 function 声明(非严格模式下)的行为未被标准统一规定,不同引擎处理不同。ES6 要求严格模式下块级函数声明应仅在块内有效,且受 TDZ 约束。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

相关推荐
小小程序猴13 小时前
用工程视角建模企业AI培训周期:三段账本估算器(Python实现)
开发语言·人工智能·python
太理摆烂哥3 小时前
MySQL表的操作
数据库
lbb 小魔仙3 小时前
时序数据库是什么?2026 年五款工业时序数据库横评与场景解析
数据库·时序数据库
十二同学啊3 小时前
Python FastAPI 项目使用 Docker 部署并映射端口(完整教程)
python·docker·fastapi
零基础1233 小时前
权限管理怎么做?从“资格”与“空间”双维度设计一套可落地的权限体系
java·服务器·数据库
不爱吃鱼的蔓热莓3 小时前
Autosar arxml异常字符串处理
python
FBI HackerHarry浩3 小时前
Pytorch中 CPU tensor vs GPU tensor
人工智能·pytorch·python·深度学习
wewowilling3 小时前
工作流 .... coze平台--AI--Agent--RAG--Function Calling
python·低代码·agent·零代码·工作流·coze
小草cys3 小时前
图片一键转全矢量可编辑PPT——纯Python实现,零依赖,离线可用
人工智能·python·powerpoint
小小龙学IT4 小时前
PostgreSQL 服务端机制与 SQL 实战深度解析:从 MVCC 到查询优化器
数据库·sql·postgresql