javascript/js预编译的四部曲

JS-预编译(预解析)四部曲 JavaScript是解释性语言:解释一行,执行一行。 JS运行三部曲: 词法分析: 虽然JS是解释一行执行一行,但在解释执行之前会首先通篇扫描一遍查看有没有低级语法错误。 预编译: 发生在代码执行的前一刻。 解释执行: 开始执行代码,解释一行执行一行。 预编译初始: ... 阅读详情

众所周知javascript是解释性语言,主要特点为解释一行执行一行。

而在js运行时会进行三件事:1语法分析 2.预编译 3.解释执行

面我们来看一下真正的预编译:

预编译(精装版本):

预编译的四部曲:

    1.创建GO/AO对象
    2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
    3.将实参值和形参统一

    4.在函数体里面找函数声明,值赋予函数体

在这里插入图片描述
再次函数中我们来进行预编译:
1.创建AO对象:我们隐式的在函数中创建了一个AO的对象来盛放函数中的变量,此时对象中并没有值;

   2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined:我们在第二个过程中需按照变量和形参
   ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190403211313807.png)
   3.将实参值和形参统一:此时将实参带入函数中由于在函数外 f(1),因此AO中a = 1
   ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190403211412144.png)
   4.在函数体里面找函数声明,值赋予函数体:由于在函数中有 function a() {} ,这一函数因此此时AO中 a = function a() {}
   ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190403211447845.png)
   在进行完预编译后此时若执行函数则会以AO为基础对函数中的变量进行赋值:此时函数中有两次打印一次在函数开头,一次在函数为a赋值之后

再赋值前由于AO中值不变因此a所打印出的值为 function a() {}

在赋值后AO中a = 123,所以此时打印出的值为123。

JS预编译四部曲 JavaScript是解释性语言:解释一行,执行一行。 JS运行三部曲: 词法分析: 虽然JS是解释一行执行一行,但在解释执行之前会首先通篇扫描一遍查看有没有低级语法错误。 预编译: 发生在代码执行的前一刻。 解释执行: 开始执行代码,解释一行执行一行。 预编译初识: var a = 123; console.log(a); //控制台打印123; console.log(a); var a = 123; //控制台打印undefined; console.log(a); //报错!Uncaught ReferenceError: a is not defined!(因变量a没定义) 这 立即下载

相关推荐

从拆箱到跑通:Intel RealSense D435i开箱实测+ROS驱动配置全流程

本文详细记录了Intel RealSense D435i深度相机的开箱体验,并提供了在Ubuntu 22.04与ROS2 Humble环境下,从安装librealsense2 SDK到配置ROS2驱动的完整流程。重点解决了驱动安装、数据流发布、点云对齐以及IMU数据融合等关键步骤,帮助研究者和开发者快速实现D435i与机器人系统的集成。

weixin_29168393的博客 304

JS函数预编译过程

众所周知,函数有自己的作用域,并且JS存在函数预编译。那么今天来简单谈一谈,函数预编译的过程。 函数预编译主要分为四步: 1、创建执行上下文对象AO ,ji'shi

baidu_36095053的博客 532

Vivado XDMA仿真实战:从配置到链路训练全解析

本文深入解析了Vivado中XDMA IP核的仿真实战流程,重点剖析了PCIe链路训练状态机(LTSSM)的工作原理与调试方法。通过搭建仿真环境、解读日志与波形,手把手指导如何从配置、链路训练(LTSSM)到BAR映射与DMA启动进行全流程分析与问题定位,帮助工程师掌握核心调试技能,确保PCIe链路稳定与数据传输正确。

weixin_29197051的博客 154

js预编译的四部曲

学习到了一些关于预编译和作用域的知识和大家分享一下! 众所周知javascript是解释性语言,主要特点为解释一行执行一行。 而在js运行时会进行三件事:1语法分析 2.预编译 3.解释执行 语法分析会在代码执行前对代码进行通篇检查,以排除一些低级错误 预编译发生在代码执行的前一刻 解释执行顾名思义就是执行代码 我先给大家举几个预编译的小例子: ...

Bombas的博客 1万+

四路独立可控供电USB 2.0智能集线器设计

USB集线器是连接外设的基础接口设备,其供电管理能力直接影响系统可靠性与远程运维效率。传统HUB仅提供固定VBUS输出,缺乏端口级电源控制机制,难以实现软复位、故障隔离与功耗优化。本方案基于USB 2.0协议透明转发原理,通过硬件级电子负载开关(如MT9700)与独立MCU(ESP32-C3)协同,构建具备四路独立限流(680mA)、纳秒级通断响应、WiFi/MQTT远程管控能力的智能供电架构。技术价值体现在协议无侵入、控制域与数据域物理隔离、默认安全上电策略等工程实践要点,广泛适用于工业远程调试、实验室设

weixin_36289742的博客 193

Codesys电子凸轮实战:从机械替代到虚轴设计的5个关键步骤

本文详细介绍了Codesys电子凸轮技术在运动控制领域的实战应用,从机械替代到虚轴设计的5个关键步骤。通过电子凸轮技术,操作员可以快速调整切割模式,显著提升产线效率。文章还探讨了虚轴架构、CAM表设计、动态耦合技巧及调试避坑指南,为工业自动化领域提供了实用的解决方案。

tech5的博客 767

“三 四部曲”带你走进js的预编译世界

预编译 首先,我们来讲一下什么是预编译: 面对代码,我们可以清晰的知道它的运行方式和顺序,但是,计算机不一定能懂。 在js中,有一个v8引擎,它可以形象的拆分为两个部门,“编译部门”和“执行部门”。在执行代码时,引擎会先让“编译部门”把js代码编译成引擎能读得懂的样子,这个过程就叫预编译。 预编译一定发生在代码执行之前(有些地方是 代码执行之时) 预编译的类型 预编译分为函数预编译和全局预编译:函数预编译发生在函数执行的前一刻,而全局预编译发生在页面加载完成时执行。 函数预编译“四部曲” 创建一个AO(a

yjf1060521866的博客 545

Arduino IDE 2.3.2 配置 UNO R4 WIFI 开发环境避坑指南(附LED矩阵驱动测试)

本文详细介绍了如何在Arduino IDE 2.3.2中配置UNO R4 WIFI开发环境,并提供了LED矩阵驱动的实战指南。从开发环境搭建到硬件连接,再到LED矩阵的初始化和弹球动画实现,手把手教你避开常见配置陷阱,最终实现流畅的动画效果。特别适合刚接触UNO R4 WIFI的开发者快速上手。

weixin_28675839的博客 220

js编译和运行的区别,js预编译的四部曲

这篇文章主要介绍了js编译和运行的区别,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

wenangou6 684

全面解读AI Infra:架构、生态与未来趋势

文章摘要 大模型时代下,AI基础设施(AI Infra)成为关键技术基建,涵盖从数据准备到模型服务的全栈技术体系。文章系统解构了AI Infra的四层架构(硬件资源层、资源管理调度层、开发框架层、平台工具层),并分析了全球AI Infra生态图谱,包括云计算巨头、芯片厂商等全栈服务商,以及中国特色的多元竞合格局。通过对比Data Infra与AI Infra的核心差异,指出AI Infra更关注智能应用的规模化与自动化。文章还探讨了从传统数据设施向AI基础设施的转型路径,强调自主可控、软硬协同等发展趋势,为

技术引领业务创新 610

嵌入式STM32F407CET6移植OpenHarmony系统方法

文件末尾添加:export PATH=~/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH。编译完成文件输出在LiteOs源码目录下out/STM32F407_ATK_Explorer文件夹中。②点击connect to the target,下方会自动显示识别出来的芯片型号以及flash大小。⑤点击program verify并点击start,等待烧写并校验完成,你就能看到程序正在运行了。,在选择刚才我们说的Huawei_LiteOS.hex文件。

嵌入式技术开发 546

JavaScript之预编译学习(附带多个面试题)_预编译面试题

JavaScript是解释性语言,也就是说,编译一行,执行一行,但js并非上来就进入编译环节,它在编译之前存在预编译过程。js中预编译一般有两种:全局的预编译和函数的预编译,分别发生在script内代码执行前和函数的执行前。

2401_89224864的博客 494

(汇总篇)语义SLAM相关开源方案| 全球优秀作者与实验室 | SLAM学习资料整理

SLAM 与深度学习相结合的工作当前主要体现在两个方面,一方面是将语义信息参与到建图、位姿估计等环节中,另一方面是端到端地完成 SLAM。针对建图的工作一方面是利用几何信息进行稠密重建,另一方面很多工作利用语义信息达到了很好的语义重建效果,三维重建、SFM。动态 SLAM 也是一个很值得研究的话题,这里不太好分类,很多工作用到了语义信息或者用来三维重建,收集的方案相对较少。优化可能是 SLAM 中最难的一部分了吧 +_+ ,一般都是直接用现成的因子图、图优化方案,要创新可不容易。

熊猫小妖的AI世界 7867

JavaScript之预编译学习(附带多个面试题)

就以上述例子中的a为例,有形参a,变量a,函数a,那test函数执行时,此时的a到底是什么呢?要想弄明白最终的输出结果,就不得不好好学习一下预编译的详细过程。。这句话可以解决大多数场景下的预编译问题,但光凭这句话无法理解透预编译,接下来我们来一起捋一下函数预编译的大致流程。

2401_87215162的博客 533

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

08.函数预编译

9.js学习之预编译

qq_40637729的博客 662

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

预编译

暗示全局变量 1.imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就位全局对象(就是window)所有。 全局对象是window a = 10; 2.一切声明的全局变量,全是window的属性。 例:var a = 10 ——> window.a = 10。 window就是全局的域 如果在全局变量在var a = 123;那么就会返回window 例如: var a = 123 console.log(a) ——> window.a fun

weixin_47410267的博客 372

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JavaScript预编译

JS引擎在正式执行一个.js文件中的代码时会先执行两个步骤,再正式执行JS代码步骤一: 语法检查该步骤会检查代码中有没有书写错误,比如一些关键字没写对,var写成vra,return写成retrun,声明变量时未进行初始化但是多写了个等号等等语法问题,全都没有问题就会进入下一个步骤步骤二: 预编译预编译会把程序中声明变量/函数进行优先处理并放入一个对象中,这个对象称为执行上下文对象,预编译会分为全局预编译和函数预编译全局预编译发生在.html文件被打开时,与其对应的是全局执行上下文对象。

优快云_Random_Name的博客 1797

【JS】预编译详解

一文带你深入了解js预编译机制

Q_3603的博客 829

JavaScript 预编译原理及经典面试题

JS 语言的特点 在深入了解 JavaScript 的预编译之前,不得不先来回忆一下 JS 语言的特点: 解释型语言: 区别于编译型语言,逐行编译,就是编译一行,执行一行,而且对速度要求并不是太高; JS 引擎是单线程的; JS 符合 ECMA 标准; JS 执行队列类似于轮转时间片。 JS 运行三部曲 在这里,最重要的就是第一点:解释型语言的运行过程。 JS 运行有三部曲: 语法分析:很简单,就是通篇扫描一下有没有低级语法(语义)错误; 预编译: 简单地说就是在内存中开辟了一些空间,存放一些变量与函

EP的别三日 1206

js预编译 --预编译详解四部曲

预编译 首先看一个例子 var a = 10 console.log(a); //输出为10 console.log(a) //输出为undefined var a = 10 出现这种情况的原因是:js解释型语言 ,也就是解释一行执行一行,第一种情况是正常输出,第二种之所以会输出undefined 而不是报错就是归功于预编译 js代码执行分为三步: 1,语法分析 2,预编译 3,解释执行 语法分析就是通篇检查你的代码有没有低级错误 预编译发生在代码执行的前一刻 解释执行就是执行你的代码 预编译的前

前端初学 587

JavaScript 预编译过程的详细解读

JavaScript预编译01 关于预编译的一些知识点02 预编译四部曲(局部)1. 创建AO对象(Activation Object) (执行期上下文)2. 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined3. 将实参值和形参统一 (全局预编译省略这一步)4. 在函数体里面找函数声明,值赋予函数体03 综合例题------全局和局部的预编译和解释执行过程1. 全局预编译三部曲2. 局部预编译四部曲3. JavaScript的解释执行

Yuki_yuhan的博客 1493

3. JavaScript 之预编译

函数声明,整体提升变量声明,声明提升如果遇到复杂的情况,就要按照全局预编译的三部曲和函数预编译的四部曲一步一步推导。最后,在预编译时一定要注意return、if等代码逻辑判断是在执行时候做的,预编译不管这些,预编译只管变量、形参、函数等。

LBJ辉的前端天地 920

【JavaScript】一篇文章,带你拿捏JS的预编译

本文介绍了JavaScript的预编译机制及其核心概念。首先通过代码示例展示了变量提升的现象,引出执行上下文的概念,解释其创建和执行两个阶段。接着说明执行栈的工作原理,以及执行上下文与作用域的区别。重点分析了预编译过程,包括全局和函数体内的编译步骤,并通过示例代码详细演示了执行上下文的创建与变化。最后指出预编译仅适用于var和function声明,let/const不存在变量提升。文章通过实际的代码分析帮助理解JavaScript引擎在运行时的处理机制。

sunshine_dd的博客 1135

js预编译

大家都知道,javascript是解释性语言,主要特点为解释一行执行一行。 而在js运行时会进行三件事:1.语法分析 2.预编译 3.解释执行 语法分析会在代码执行前对代码进行通篇检查,以排除一些低级错误 预编译发生在代码执行的前一刻 解释执行就是执行代码 预编译的作用: 1、函数声明整体提升; 即写出一个函数声明,不管写在哪里,系统总会将其提升到逻辑最前面。 2、变量声明提升 例如: document.write(a); var a = 123; //undefinde; 即相当于:

木易的博客 2314

javascript函数预编译四部曲

111

连眉ss的博客 437
上一篇: Python就业可选方向有哪些?带你了解Python主流职业选择!
下一篇: 程序员面试时如何优雅地自我介绍?
YPL_ZML
博客等级 码龄8年 37粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值