js预编译(全局预编译/函数预编译)

1.预编译

预编译是上下文创建之后, js代码执行前的一段时期, 在这个时期, 会对js代码进行预处理。

2.全局预编译

全局上下文创建后,会生成变量对象VO:var变量-》函数-》同名函数覆盖变量名

  1. VO首先寻找变量声明,将var声明的变量作为VO对象的属性名,值为undefined。
  2. 然后寻找函数声明,属性值为函数本身
  3. 如果函数名与变量名冲突,函数声明会将变量声明覆盖。
function a(b, c) {console.log(b);          	var b = 0console.log(b);		var b = function () {console.log('bbbb')}	console.log(c);		console.log(b);				
}
a(1)

全局预编译分析:

        // 第一步:寻找变量声明var,将变量名作为属性名,将值设置为undefinedVO {a: undefined}// 第二步:寻找函数声明,属性值为函数本身// 第三步:函数名和变量名冲突,函数声明会覆盖变量声明VO {a: undefined-> function a() { }}
//执行结果: function a() { }, 100

3.函数预编译

函数上下文创建后,会生成变量对象AO:函数预编译: var变量-》形参-》实参赋值给形参-》函数-》同名函数覆盖变量声明

  1. 寻找变量声明, 变量名作为AO对象的属性名, 属性值置为 undefined
  2. 寻找形参, 形参名作为AO对象的属性名, 属性值置为 undefined
  3. 将实参的值赋予形参, 即替换 AO对象中形参的属性值
  4. 寻找函数声明, 函数名作为AO对象的属性名, 属性值为函数本身
  5. 如果函数名与变量名冲突, 函数声明会将变量声明覆盖 
function a(b, c) {console.log(b);          	var b = 0console.log(b);		var b = function () {console.log('bbbb')}	console.log(c);		console.log(b);				
}
a(1)

函数预编译解析:

        // 第一步:寻找函数中的变量声明,将变量名作为属性名,将值设置为undefinedAO : {b: undefined,}// 第二步:寻找形参AO : {b: undefined,c: undefined,}// 第三步:将实参传给形参(b变成了1)AO : {b: undefined -> 1,c: undefined,}// 第四步:寻找函数声明(此处没有)// 第五步:如果函数名与变量名冲突, 函数声明会将变量声明覆盖(此处没有)// 执行结果:1 ,0,(将函数赋值给b),undefined, b的函数体

4.预编译面试题

        // 面试题function fn(a, c) {console.log(a)var a = 123console.log(a)console.log(c)function a() { }if (false) {var d = 678}console.log(d)console.log(b)var b = function () { }console.log(b)function c() { }console.log(c)}fn(1, 2)

预编译解析: 

        // 函数预编译: var变量-》形参-》实参赋值给形参-》函数-》同名函数覆盖变量声明AO:{a: undefined->1->funA,d: undefined,b: undefined-》funB,c: 2->funC}// 执行结果:funA,123,funC,undefined,undefined,funB,funC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/105562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netty P1 NIO 基础,网络编程

Netty P1 NIO 基础,网络编程 教程地址:https://www.bilibili.com/video/BV1py4y1E7oA https://nyimac.gitee.io/2021/04/25/Netty%E5%9F%BA%E7%A1%80/ 1. 三大组件 1.1 Channel & Buffer Channel 类似 Stream,它是读写数据的双向通道…

柔性数组(C语言)

文章目录 1. 柔性数组的定义2. 柔性数组的特点3. 柔性数组的使用4. 柔性数组的好处 也许你从来没有听说过 柔性数组这个概念,但是它确实是存在的。柔性数组是C语言中一种特殊的结构,它允许在结构体的末尾定义一个可变长度的数组。 1. 柔性数组的定义 柔…

xdma stream (timeout)

xdma 回环 vivado 里有官方示例 fpga:pcie rx – axi-stream master – axi-stream slave – pcie tx 流程:电脑启动读取,然后电脑再在超时时间内写入。或者电脑启动写入,然后电脑再在超时时间内读出。只读取或只写入会报超时&am…

易点易动固定资产管理系统:RFID出入监控,保障固定资产安全

在企业管理中,固定资产的安全和管理一直是一项重要的任务。企业往往面临着固定资产丢失、盗窃和不当使用等问题,给企业带来巨大的经济损失和管理难题。为了解决这些问题,我们推出了易点易动固定资产管理系统,结合RFID出入监控技术…

@ConditionalOnProperty 用法

文章目录 前言一、使用场景二、使用步骤1.错误示例2.ConditionalOnProperty的解决方案 总结 前言 ConditionalOnProperty 是Spring Boot中的条件注解,它的核心功能是通过属性名以及属性值来实现的,常被用于判断某个属性是否存在,然后决定某个…

商品API接口优秀案例 │ 国家电网办公物资电商化采购项目API解决方案

苏宁易购集团股份有限公司(以下简称“苏宁”)作为中国领先的O2O智慧零售商,在互联网、物联网、大数据盛行的时代,持续推进智慧零售和线上线下融合战略,全品类经营,全渠道运营,开放苏宁物流云、数…

asp.net老年大学信息VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计

一、源码特点 asp.net老年大学信息管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c# 语言开发 asp.net老年大学信息管理系统…

实习项目遇到的bug

问题1: 大概是因为没设置ts类型,它查不到的问题,不定义的话加上问号,加上可选链就不会报错了 {{bizEquipmentInfo.lastUnlockingVO?.lastUnlockingTime.replace(T, )? bizEquipmentInfo.lastUnlockingVO?.lastUnlockingTime.r…

【(数据结构) —— 顺序表的应用-通讯录的实现】

(数据结构)—— 顺序表的应用-通讯录的实现 一.通讯录的功能介绍1.基于动态顺序表实现通讯录(1). 功能要求(2).重要思考 二. 通讯录的代码实现1.通讯录的底层结构(顺序表)(1)思路展示(2)底层代码实现(顺序表) 2.通讯录上层代码实现(通讯录结构…

idea中导入eclipse的javaweb项目——tomact服务(保姆级别)

idea中导入eclipse的javaweb项目——tomact服务(保姆级别) 1. 导入项目2. Project Settings下的各种配置步骤2.1 检查/修改 jdk 的引入2.2 配置Modules-Dependencies2.2.1 删掉eclipse相关的多余配置2.2.2 删掉jar包2.2.3 添加tomcat的依赖 2.3 配置Libr…

spring:详解spring boot

spring的优缺点 虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配 置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入 了…

基于单目的光流法测速

目录 1.简介 2.代码实现 1.简介 基于单目的光流法是一种常见的计算机视觉技术,用于估计图像序列中物体的运动速度。它通过分析连续帧之间的像素变化来推断物体在图像中的移动情况。 背景: 光流法是计算机视觉领域中最早的运动估计方法之一&#xff0c…

HTML图片标签(2) HTML5+CSS3+移动web 前端开发入门笔记(三)

图片标签 HTML中&#xff0c;可以使用标签来插入图片。具体的语法为&#xff1a; <img src"图片路径" alt"替代文本">其中&#xff0c;src属性用于指定图片的路径&#xff0c;可以是相对路径或绝对路径。常见的有相对当前HTML文件的路径&#xff0…

【灵动 Mini-G0001开发板】+Keil5开发环境搭建+ST-Link/V2程序下载和仿真+4颗LED100ms闪烁。

我们拿到手里的是【灵动 Mini-G0001开发板】 如下图 我们去官网下载开发板对应资料MM32G0001官网 我们需要下载Mini—G0001开发板的库函数与例程&#xff08;第一手学习资料&#xff09;Keil支持包&#xff0c; PCB文件有需要的&#xff0c;可以自行下载。用户指南需要下载&a…

k8s 1.28版本二进制安装

本文目录 二进制安装Kubernetes&#xff08;k8s&#xff09;v1.28.0介绍1.环境1.0.环境准备1.Linux网卡没有eth0显示ens33或者其它&#xff08;以ens33为例&#xff09;方法一&#xff1a;修改网卡配置方法二&#xff1a;重新安装机器(本文为虚拟机) 2.克隆的虚拟机&#xff0c…

大疆无人机

1、参考说明书 大疆Mavic 系列&#xff1a;御 Mavic Air 2 用户手册说明书 v1.4(含配件使用说明).pdf-原创力文档 2、app下载地址 DJI Fly - 下载中心 - DJI 大疆创新 app里有相关app教程

CentOS 7文件系统中的软链接和硬链接

软链接&#xff08;Symbolic Link&#xff09; 软链接&#xff0c;也称为符号链接&#xff0c;是一个指向另一个文件或目录的特殊类型的文件。它是一个指向目标文件的符号&#xff0c;就像快捷方式一样。软链接的创建和使用非常灵活&#xff0c;适用于各种情况。 创建软链接 …

机器人控制算法——两轮差速驱动运动模型

1.Introduction 本文主要介绍针对于两轮差速模型的逆运动学数学推导。因为在机器人控制领域&#xff0c;决策规划控制层给执行器输出的控制指令v(车辆前进速度)和w(角速度)&#xff0c;因此&#xff0c;我们比较关心&#xff0c;当底层两个驱动电机接收到此信息&#xff0c;如何…

Bug:.tar文件解压后提示“不可信的旧时间戳”解决方案

Bug&#xff1a;.tar文件解压后提示“不可信的旧时间戳”解决方案 1 原因一&#xff1a;docker.gz应该用docker load -i xx.tar # 如果是 docker镜像tar包不是用tar解压&#xff0c;而应该用 docker load -i xxxx.tar来导入镜像2 原因二&#xff1a;服务器时间与其对应不上 …

进化算法------代码示例

目录 前言代码示例1、寻找函数最大值2、句子匹配 前言 遗传算法就是在一个解空间上&#xff0c;随机的给定一组解&#xff0c;这组解称为父亲种群&#xff0c;通过这组解的交叉&#xff0c;变异&#xff0c;构建出新的解&#xff0c;称为下一代种群&#xff0c;然后在目前已有…