js解惑-函数执行顺序

  • 时间:2018-08-12 22:56 作者:前端秘史 来源:前端秘史 阅读:1401
  • 扫一扫,手机访问
摘要:函数解析原理分3个阶段:准备(Hoisting)装载(填充数据)执行(逐行解决)准备本阶段就是书本中所说的Hoisting,包括:形参变量创立、函数体内变量提升创立 和 函数申明创立。就是先把函数中所有的变量或者者公告的函数名都先定义好,空间都开拓好。关于准备阶段的特别说明:假如变量已经定义过,则不
js解惑-函数执行顺序

函数解析原理

分3个阶段:

  1. 准备(Hoisting)
  2. 装载(填充数据)
  3. 执行(逐行解决)

准备

本阶段就是书本中所说的Hoisting,包括:形参变量创立、函数体内变量提升创立 和 函数申明创立。

就是先把函数中所有的变量或者者公告的函数名都先定义好,空间都开拓好。

关于准备阶段的特别说明:

  1. 假如变量已经定义过,则不会重新定义(比方:形参中有个参数a,并且调使用函数时传了值进来,这时候函数中还有个变量a,那么在这一阶段,函数中的变量a是不会重新定义,形参中的值也不会被覆盖。);

装载

这里装载填充的数据包括:形参 和 申明的函数体。

也许你要问了,为什么一般的变量只是拿到前面定义好,此时值是 undefined,填充数据需要等到执行那一行才进行,而 形参 和 申明的函数 在代码执行前就要装载好呢?

答: 我个人的了解是(有更专业的解释,欢迎批评指正):

  • 形参 是外部传进来的,是函数在执行前就已经知道的数据,所以直接就装载上;而对于函数中普通的变量,受限于JS解析顺序的机制影响,只能等到具体执行到那一行时才能知道。
  • 函数申明 为什么要放到前面去呢?这应该也是JS的策略吧,不然函数表达式(var xxx=fn)为啥就没这个待遇呢?

关于装载的特别说明:

  1. 数据装载的数据为:函数形参 > 函数申明;
  2. 对于函数公告装载时,假如已经有相同的函数名的话,会覆盖前面的(比方:形参中有个参数a,并且外部给他赋了值,这时候函数中假如有个函数申明a,那么在这一阶段,形参中的a就会被覆盖为这个函数)。

执行

通过上面的2个阶段,大家就知道,当函数真正一行行开始执行的时候,其实有些值已经存在了,并不是大家想象中的一律为 undefined。

本阶段就是纯粹的执行代码了,执行就包括了:变量赋值、对象调使用等等。

但是本阶段其实JS引擎还做了另外一件事情,就是:代码检查。假如报错了,会直接中断程序,除非用 try/catch 捕获。

示例

js解惑-函数执行顺序

本示例的结果是什么呢?大家可以点击下文 “查看更多” 跳转到具体的我的github查看更介绍的分析。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部