新闻中心

js函数声明的提升顺序

2025-11-12
浏览次数:
返回列表
函数声明优先提升且覆盖同名变量,多个同名函数后者覆盖前者,函数表达式仅变量提升。

js函数声明的提升顺序

在J*aScript中,函数声明的提升(hoisting)是指函数声明会在代码执行前被“提升”到当前作用域的顶部。理解函数声明的提升顺序,有助于避免运行时错误和意料之外的行为。

函数声明优先于变量声明提升

在同一个作用域中,函数声明会被优先提升,并且优先级高于变量声明。这意味着:

  • 函数声明会完整地被提升到作用域顶部。
  • 变量声明也会被提升,但不会赋值(初始化留在原地)。
  • 如果函数和变量同名,函数声明会先被提升并覆盖变量声明(在提升阶段)。
示例:

console.log(typeof foo); // "function"
foo(); // 能正常执行

var foo = "hello";
function foo() {
  console.log("I am a function");
}

上面代码实际执行时等价于:

function foo() {
  console.log("I am a function");
}
// var foo; (声明被提升,但赋值不提升)
console.log(typeof foo); // "function"
foo(); // 正常调用
foo = "hello"; // 此处才是赋值

多个函数声明同名时,后声明的覆盖前面的

当存在多个同名函数声明时,提升过程中后面的函数会覆盖前面的:

foo(); // 输出 "later"

function foo() {
  console.log("earlier");
}
function foo() {
  console.log("later");
}

因为两个函数都会被提升,但第二个函数声明会覆盖第一个。

Musho Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho

函数表达式不会完全提升

注意:只有函数声明会被完整提升,函数表达式(尤其是匿名函数赋值给变量)只提升变量名,不提升函数体:

foo(); // 报错:foo is not a function

var foo = function () {
  console.log("I'm an expression");
};

这等价于:

var foo;
foo(); // 此时foo是undefined
foo = function () {
  console.log("I'm an expression");
};

总结:

J*aScript中函数声明提升的顺序规则如下:

  • 所有函数声明优先被提升到作用域顶部。
  • 同名函数声明中,后面的覆盖前面的。
  • 变量声明也提升,但不会影响已提升的函数(除非后续赋值覆盖)。
  • 函数表达式遵循变量提升规则,函数体不会提升。
基本上就这些。

以上就是js函数声明的提升顺序的详细内容,更多请关注其它相关文章!


# 第一个  # 银川网站建设的价格  # 零食搜索关键词排名  # 知名网站建设服务至上  # 漯河品牌短视频营销推广  # 福田大型网站建设  # seo网络推广首页排名  # 铁岭seo工具如何营销  # seo学习都学什么  # 加盟行业网站seo宣传  # 望江网站建设电话咨询  # 才是  # 尤其是  # 函数提升  # 有哪些  # 也会  # 有何不同  # 服务端  # 加载  # 如何实现  # 多个  # 作用域  # js  # java  # javascript 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Win11怎么开启高性能模式_Windows 11电源计划优化设置  Surface怎么安装系统 微软Surface Pro U盘重装win11教程  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  抖音网页版平台入口 抖音网页版官网在线访问教程  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  晋江读书网页版在线登录 晋江读书电脑版官网  邮政快递包裹最新位置 邮政快递实时追踪入口  抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明  css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容  Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  自定义Bag-of-Words实现:处理带负号的词汇权重  必由学官网入口 必由学教师登录入口  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件  批改网学生版PC登录 批改网官网登录系统入口  EMS快递官网app_中国邮政速递物流手机客户端  Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突  动漫岛观看全网网 动漫岛在线正版动漫入口  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  深入理解Promise链:如何在catch后中断then的执行  照顾宝贝2小游戏点击立即在线玩  J*aScript打印功能_j*ascript输出控制  CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠  CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略  妖精动漫免费平台 妖精动漫官网资源观看网址  Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  微信网页版官方入口直达 微信网页版网页版登录使用方法  怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法  qq游戏手机版下载安装_qq游戏移动端入口  最新韩小圈网页版登录入口_官网在线观看官方链接  Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明  html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】  解决Python logging 中 datefmt 导致时间戳固定不变的问题  AO3同人作品网入口 AO3搜索引擎官网永久地址  Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】  Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS  c++ 获取系统当前时间 c++时间戳获取方法  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  韩剧圈正版入口页面_韩剧圈官网登录链接  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录 

搜索