JS基础 预编译 与 AO对象

2023-11-18

预编译发生在函数执行的前一刻
预编译在函数执行的前一刻完成

function pre(a) {
    console.log(a); // ?
	var a = 100;
	console.log(a); // ?
	console.log(b); // ?
	var b = function() {console.log("函数b")}
	console.log(b); // ?
	function a() {console.log("函数a")}
	console.log(a); // ?
	function c() { console.log("函数c")}
}
pre(10)

在pre函数执行前 发生:

  1. 创建AO对象
    AO(Activation Object) 活跃对象 – 执行期上下文
    此时AO对象
AO: {}
  1. 找形参和变量声明,将两边和形参名作为AO对象的属性名,值为undefined
    此时AO对象
AO: {
	a: undefined,
	b: undefined
}
  1. 将实参值赋值给形参
    此时AO对象
AO: {
	a: 10,
	b: undefined
}
  1. 在执行函数(此例为pre函数)体里面寻找函数声明,将函数声明挂到AO对象上
AO: {
	a: function a() {console.log("函数a")},
	b: undefined,
	c: function c() { console.log("函数c")}
}

预编译结束,执行函数体

function pre(a) {
    console.log(a); // function a() {console.log("函数a")}
	var a = 100; //预编译不会执行语句 所以此时对a进行赋值
	console.log(a); // 100
	console.log(b); // undefined
	//↓ ==>  预编译不会执行语句 所以此时对b进行赋值
	var b = function() {console.log("函数b")} 
	console.log(b); // function() {console.log("函数b")}
	function a() {console.log("函数a")} //预编译已将函数定义提升,此句不再执行
	console.log(a); // 100
	function c() { console.log("函数c")}
}
pre(10)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS基础 预编译 与 AO对象 的相关文章

随机推荐

  • C语言用循环编写简单菜单程序

    C语言用循环编写简单菜单程序 源码如下 include
  • MyBatis架构与原理深入解析

    点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 8 55 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2020 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络
  • 汽车信息安全标准ISO/SAE21434与UN/WP.29阅读总结

    1 序言 伴随着汽车与外界的交互手段不断丰富 车联网相关设备 系统间的数据交互更加频繁 万物互联下的网络攻击也逐渐渗透延伸到车联网的领域 这给汽车行业带来了新的 专属挑战 我这几天简要阅读了汽车信息安全领域的几个重要的国际规范 本文就简要讨
  • 光分配网(ODN)一级分光和二级分光的区别及应用场景

    光分配网 ODN 的分光方式主要有两种 一级分光和二级分光 如图1所示 受PON设备光功率预算及带宽的限制 当前 ODN的总分路比一般为1 64 图1 ODN的一级分光和二级分光 采用一级分光时 分路器一般设置在配线光交处 采用二级分光时
  • 什么是新生代的复制算法

    https blog csdn net ooppookid article details 51523701 1 什么是新生代的复制算法 了解堆内存看这里 java堆内存是什么样的 了解java垃圾回收看这里 java垃圾回收机制是什么 所
  • 图像拼接算法及实现_浅谈图像处理算法的实现途径(CPU/FPGA/ASIC)

    人们对图像质量要求的不断提升 直接推动着图像算法的不断向前发展 那么到今天为止 常用的图像处理算法是怎么实现的呢 今天我们来谈一谈 图像处理算法的实现一般有两种途径 软件或者硬件 软件 VS 硬件 软件实现方式 成本低 迭代快 且随着现在各
  • c++调用sqlite3(带加解密)

    StringConvert见https blog csdn net wxd090108 article details 84190762 第三方文件 下载地址 https sourceforge net projects wxcode fi
  • 第六题 整除排序

    题目描述 有一个序列 序列的第一个数是n 后面的每个数是前一个数整除2 请输出这个序列中的值为正数 的项 输入格式 输入一行包括一个整数n 输出格式 输出一行 包括多个整数 相邻的整数之间用一个空格分开 表示答案 测评用例规模和标准 对于8
  • 原理图库元件符号之二极管模型的创建

    今天我们来绘制一个二极管的模型 效果图如下 Step 01 首先画两个引脚 并把Name属性隐藏 Step 02 使用多边形命令 绘制二极管的本体 Step 03 修改多边形属性 多边形线宽改为smallest 然后填充为蓝色 效果图如下
  • Vue中export const 和 export default的区别

    export const 一个文件中可以有好多个 名字叫命名导出 export default 一个文件中只能有一个 名字叫默认导出 代码举例 详见资料链接
  • kong配置好跨域组件后,仍不能跨域,

    路由配置加上OPTIONS
  • python写入txt不覆盖_python不能覆盖文件内容如何解决

    python不能覆盖文件内容的解决方法 使用 with open f w as file 命令即可覆盖文件内容 w 代表每次运行都覆盖文件内容 python不能覆盖文件内容有可能是因为文件的打开方式为追加写方式 更改文件打开方式即可实现再次
  • Linux内存分析free与cache清理

    1 free命令 Linux中查看内存的命令为free 命令如下 free h total used free shared buff cache available Mem 62G 4 9G 627M 520K 57G 57G Swap
  • 面试顺序问题:用数学建模优化生产与服务运作中的管理问题

    例题 有 4 名同学到一家公司参加三个阶段的面试 公司要求每个同学都必须首先 找公司秘书初试 然后到部门主管处复试 最后到经理处参加面试 并且不允许插队 即 在任何一个阶段 4 名同学的顺序是一样的 由于 4 名同学的专业背景不同 所以每人
  • Spring知识体系

    Spring知识体系 一 基本介绍 1 Spring全家桶 Spring SpringMVC Spring Boot Spring Cloud 其中Spring是其他的基础 2 Spring 出现的目的是为了解决企业级开发的难度 减轻对项目
  • ARouter在kotlin中使用,传递Int Long Double类型的参数空指针异常

    ARouter在kotlin中使用 传递Int Long Double类型的参数由A activity传递到 B activity 在B Activity接收时出现空指针异常 java lang NullPointerException A
  • clickhouse insert的数据结构

    clickhouse insert大致分为两部分 1 sql语句部分 insert into table f1 f2 2 数据部分 数据部分又分为3部分 头 数据 尾 数据头 数据块1 数据块2 数据块N 数据尾 从中可以看出 每个inse
  • Mybatis对数据的增删改查

    文章目录 创建sql的映射文件 增加 插入数据 修改 删除 查找 向数据库参数传递 简单参数 多个参数 传入对象 使用map传递 Mybatis的基本增删改查总的代码演示 创建sql的映射文件
  • 在 esp32 上运行 lvgl + freetype

    前言 最近有个需求 如何在 esp32 上运行 lvgl freetype 这个想法的难点是 freetype 的环境搭建 我想将其做得非常简单 最好的办法是做成组件来使用 所以我将 freetype 的相关依赖做成了 esp idf 组件
  • JS基础 预编译 与 AO对象

    预编译发生在函数执行的前一刻 预编译在函数执行的前一刻完成 function pre a console log a var a 100 console log a console log b var b function console