JS(八)预编译执行过程

128、点云配准与ICP:经典配准算法与深度学习配准 上周调试一台双臂协作机器人,左手持结构光相机扫描桌面上的随机堆叠工件,右手准备执行抓取。问题出在“对齐”这一步——相机扫描得到的点云和CAD模型点云之间差了大约15度的旋转,导致抓取姿态计算出来直接怼到桌面上。我第一反应是“ICP跑一下不就行了”,结果跑了三分钟,误差纹丝不动,甚至越迭代越发散。后来查了日志才发现,初始位姿给得太离谱,ICP直接掉进了局部最优。这个场景太典型了——很多人以为点云配准就是调个ICP库函数,实际工程里坑比想象中多得多。今天这篇笔记,咱们把点云配准这件事从头捋一遍。 阅读详情

写在最前面

JS运行三部曲

  • 第一步:语法分析
  • 第二部:预编译
  • 第三部:解释执行
预编译

语法分析也叫语义分析,语法分析他是通篇执行的一个过程,比如我写了好多行代码,这些代码在执行的时候他是解释一行执行一行,但是在执行之前系统执行的第一步它会扫描一遍,看看有没有低级的语法错误,比如少些个括号,带个中文之类的,它会通篇扫描一遍,但是不执行,这个通篇扫描的过程叫语法分析,通篇扫描之后它会预编译,然后在解释一行执行一行,也就是解释执行

预编译前奏
  • imply global 暗示全局变量: 即任何变量,如果变量未经声明就赋值,自变量就位全局对象所有
    • eg : a = 123;
    • eg : var a = b = 123;
  • 一切声明的全局变量,全是window的属性
    • eg:var a = 123;===> window.a = 123;
//例子:
    function test (){
        console.log("a");
    }
    
    test();//成功打印出a,
    
    
    
    box();//写在方法之前也成功打印出a,为什么能执行就是有预编译的过程
    function box (){
        console.log("a");
    }
    
    var a =123;
    console.log(a);//输出123
    
    
    console.log(a);//输出undefined,不报错;
    var a = 123;
    
    //但是如果直接打印会报错;
    console.log(b)//报错
    //也是预编译的效果
    
    //如果想偷懒记住两句话
    //函数声明整体提升
    //变量 声明提升
    
    


    

解释一下函数声明正题提升: 如果你写一个函数声明,不管你写到哪里,系统总会把这个函数提到逻辑的最前面,所以你不管在哪里调用,在上面调用也好,下面调用也罢,本质上他都是在函数的下面调用,他会把函数声明永远给你提升到逻辑的最前面

变量 声明提升比如

var a = 123;
//实际上他是两部
var a;//先声明变量
    a = 123;//在变量赋值

所以系统提升的变量 而不是变量带着值一起提升,所以在例子中a是打印出undefined;

注意,这两句话不是万能的

比如

function a(a){
    var a = 123;
    var a = function(){
        
    }
    a();
}

var a = 123;

这个就不是那两句话可以解决的

在解释上面的之前,要先用弄什么是impiy global
  • imply globa:暗示全局变量: 即任何变量,如果变量未经声明就赋值,自变量就位全局对象所有
    • eg : a = 123;
    • eg : var a = b = 123;
a = 10;
console.log(a);//打印10
然后在window属性上有了a
window.a//10

var b = 20;
//你声明了window也有b

window就是全局的域
预编译正式
  • 创建AO对象
  • 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
  • 将实参值和形参统一
  • 在函数体里面找函数声明,值赋予函数体
function fn (a){
    console.log(a);
    
    var a = 123;
    console.log(a);
    
    function a (){};
    console.log(a);
    
    var b = function (){
        
    }
    console.log(b);
        
}

fn(1);

这个例子,参数,变量,函数名字都叫a,首先可以确定的是肯定会发生一个覆盖的现象,这样子就很矛盾前面说了函数的预编译执行在函数执行的前一刻,可以这样子说,预编译就把这些矛盾给调和了.

首先预编译的

第一步 : 创建了一个AO对象,全称是Activation object 也就是作用域,也叫执行期上下文

AO{
    
}

第二步 : 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined

AO{
    a : undefined
    b : undefined
}

第三步 : 将实参值和形参统一

AO{
    a : 1;
    b : undefined
}

第四步 : 在函数体里面找函数声明,值赋予函数体

AO{
    a : 1,
    b : undefined,
    //b是是函数表达式,不是函数声明,所以不变
    //然后有a了 有b了,然后将这个函数声明的名作为AO对象挂起来
    d : 
}

//然后值赋予函数体,也就是把a和b的属性值,变成函数体
//覆盖掉a 和b的的属性值
//也就变成下面的
//因为第四步的优先级最高
AO{
    a : function a () {}
    b : undefined,
    //b是是函数表达式,不是函数声明,所以不变
    d : function d () {}
}

至此预编译过程结束,开始执行代码,执行函数

然后我们在看上面的例子

//预编译结果
AO{
    a : function a () {}
    b : undefined,
    d : function d () {}
}
//开始执行代码
function fn (a){
    //第一步开始打印a
    //根据上面预编译的结果,
    //所以打印结果是function a () {}
    console.log(a);
    
    //第二步执行 var a = 123;
    //因为在预编译的第二步里面,变量已经提升了
    //所以第二步只执行的赋值
    //a = 123;去AO对象里面去找a
    //也就变成
    //AO{
        //a : 123   这个才是a的存储值
        //b : undefined,
        //d : function d () {}
    //}
    var a = 123;
    //所以打印出123
    console.log(a);
    //因为这句在话在预编译的时候系统已经看了
    //所以不在看这句话
    function a (){};
    //所以下面的console.log(a)
    //还是打印123;
    console.log(a);
    //一样下面的var b这句话在预编译的时候已经看了,所以不在看
    //AO{
        //a : 123   
        //所以b的值变成function(){}
        //b : function(){}
        //d : function d () {}
    //}
    var b = function (){
        
    }
    //所以打印出function(){}
    console.log(b);
        
}

fn(1);

我们在看个例子

function test(a , b){
    console.log(a);
    c = 0;
    var c;
    a = 3;
    b = 2;
    console.log(b);
    function b () {}
    console.log(b);
}

//这下我们就很快的得出打印的东西
//a-->1
//b-->2
//b-->2

预编译不只会在函数体里面,也会发生在全局里面

全局里面的第一步是先生成GO Global Object,其他一样

GO === window

那么问题来了是GO先还是AO先

答案是先执行GO

可以关注一下

YOLO26涨点改进 | 全网独家首发 主干改进篇 | TGRS 2025 | RepViT-TD,告别庞大骨干!YOLO26 + RepViT-TD轻量又强大,实现更快更准的小目标检测! 本文提出将RepViT-TD轻量级主干网络应用于YOLO26目标检测框架,以提升小目标检测性能。RepViT-TD通过优化计算资源分配,强化前两层高分辨率特征提取能力,在保持轻量化的同时(仅4.85M参数)显著提升微小目标的检测精度(AI-TODv2数据集AP50达54.6%)。文章详细介绍了三种主干改进方案(RepVit_ldy1/2/3)的代码实现,并提供了完整的YAML配置文件修改指南,使模型能高效部署于边缘设备。实验表明,该方法在计算复杂度(38.19G FLOPs)和检测精度间取得了良好平衡。 阅读详情

相关推荐

PyTorch实战:从零构建CNN图像分类模型

卷积神经网络(CNN)作为计算机视觉的核心架构,通过局部连接和权值共享机制高效处理图像数据。其核心组件包括卷积层、池化层和全连接层,其中PyTorch的动态计算图特性为CNN实现提供了灵活的开发环境。在工程实践中,使用CIFAR-10这类标准数据集可以快速验证模型性能,而数据增强和批归一化等技术能有效提升模型泛化能力。通过PyTorch实现CNN不仅能够掌握图像分类的基本原理,还能为后续迁移学习和复杂视觉任务打下基础,特别是在结合Adam优化器和学习率调度策略后,模型收敛速度和准确率都能得到显著提升。

weixin_42405592的博客 318

js预编译详解----分分钟了解预编译

在JavaScript中存在一种预编译的机制,这也是Java等一些语言中没有的特性,也就正是因为这个预编译的机制,导致了js中变量提升的一些问题 函数声明整体提升 变量声明提升 众所周知,在js中undefined通常用于指示变量尚未赋值。对未定义值的引用返回特殊值 undefined。 而我们也知道js属于解释型语言即解释一句执行一句。 <script> console.log(a) var a = 10; console.log(b

weixin_46073353的博客 1202

AMG8833红外测温实战:在STM32F103上做个简易人体感应与温度报警器

本文详细介绍了如何在STM32F103上使用AMG8833红外测温传感器构建人体感应与温度报警系统。通过硬件连接方案、驱动代码开发、人体检测算法实现及报警系统设计,展示了如何利用8x8红外温度矩阵实现智能监测功能。文章包含实用的初始化流程、温度数据读取优化和低功耗策略,为创客项目提供完整解决方案。

weixin_33725239的博客 393

js预编译

js预编译过程

weixin_43801836的博客 1459

RK3588嵌入式开发实战:U-Boot设备树文件修改全指南(含常见踩坑点)

本文为RK3588嵌入式开发者提供了一份详尽的U-Boot设备树文件修改实战指南。文章深入解析了设备树的核心架构,从基础硬件适配到时钟、电源管理等进阶配置,并重点总结了内存节点、串口输出、电源时序等常见踩坑点与解决方案,旨在帮助开发者高效、稳健地完成U-Boot移植与定制工作。

yhn456789的博客 732

简要介绍 | 雷达穿墙成像及其应用场景

本文简要介绍了雷达穿墙成像技术的原理、研究现状、挑战与未来展望,希望能为相关领域的研究与应用提供参考。具有广泛的应用前景。本文将详细介绍雷达穿墙成像的原理,以及其在不同应用场景中的实践。逆时偏移算法(Reverse-Time Migration, RTM)雷达穿墙成像技术是一种先进的遥感技术,具有。的能力,可用于探测室内目标。安全与救援、建筑结构检测等领域。雷达穿墙成像技术的核心原理是。是Green函数,表示从接收点。雷达穿墙成像及其应用场景。雷达穿墙成像及其应用场景。目标识别与定位准确性。

NLOS的博客 2232

js 预编译 GO与AO 变量和函数声明提升

预编译 预编译分为全局(GO)预编译和局部(AO)预编译,全局预编译发生在页面加载完成时执行,而局部预编译发生在函数执行的前一刻。 js运行三步曲 首先JavaScript的执行过程会先扫描一下整体语法语句,如果存在逻辑错误或者语法错误,那么直接报错,程序停止执行,没有错误的话,开始从上到下解释一行执行一行。 1 语法分析 2 预编译 3 解释执行 局部预编译(AO)的4个步骤 在执行的前一刻会创建一个ao对象 将函数内所有的形参和变量声明储存到ao对象中,value为undefined; 将形参和实

暖光的博客 674

贝叶斯机器学习在吸附量预测中的应用

本文介绍了贝叶斯机器学习在吸附量预测中的应用。通过Python实现完整的贝叶斯建模流程,包括数据生成、预处理、模型构建与评估。文章对比了贝叶斯与频率学派的差异,详细阐述了贝叶斯线性回归和神经网络的实现方法,并提供了数据可视化、模型诊断等技术细节。该方法不仅能预测吸附量,还能量化预测不确定性,为工程决策提供更全面的依据。全文超过6000字,结合理论推导与代码实践,是应用贝叶斯方法解决实际工程问题的完整指南。

AI的内部世界的博客 166

javascript/js预编译的四部曲

众所周知javascript是解释性语言,主要特点为解释一行执行一行。 而在js运行时会进行三件事:1语法分析 2.预编译 3.解释执行 面我们来看一下真正的预编译: 预编译(精装版本): 预编译的四部曲: 1.创建GO/AO对象 2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined 3.将实参值和形参统一 4.在函数体里面找函数声明,...

YPL_ZML的博客 588

手把手教你从入门到精通C#串口通信

本文以我开发的串口助手SComTool为例,详细介绍《C#串口通信从入门到精通》专栏的目录内容,本专栏由一个高级工程师多年实战经验总结,绝对是c#串口通信的葵花宝典!带您从入门到精通C#串口通信!

qq_34059233的博客 3万+

PCL 循环体素滤波

本文提出了一种自动循环体素滤波算法,用于解决点云配准中分辨率差异大、参数设置复杂的问题。算法通过计算点云分辨率(公式1),采用迭代方式调整体素尺寸(公式2),逐步逼近目标分辨率。该方法在保留几何特征的同时有效精简数据量,实现了均匀分辨率的自动调整。实验通过PCL库实现,展示了原始点云与滤波结果的对比效果,验证了算法在减少数据规模方面的有效性。该方法为点云配准提供了预处理解决方案,相关成果已发表于SCI期刊。

点云侠的博客 281

Javascript中的预编译

js预编译分为全局预编译和函数预编译:全局预编译发生在页面加载完成时执行,而函数预编译发生在函数执行的前一刻。

m0_47974640的博客 445

NVIDIA Isaac Sim 入门教程(二)

Omniverse Isaac Sim 的工作空间非常容易自定义。调整用户界面的大小、停靠、取消停靠、添加和移除面板都非常容易。进入顶部菜单栏,单击下拉菜单最下方的窗口 > 视口 > 视口 2(现在工作区中应该会出现一个名为 "视口 2 "的新视口。如果您想创建更多的视口,请按照相机检查器扩展进行操作。单击并拖动视口 2 的顶部标题以激活停靠部件。拖放到原始视口的右侧,将两个视口并排放置。单击并向左拖动视口 2 的左侧,使视口大小相等。

机器人控制与仿真应用 6544

JavaScript预编译过程

JavaScript预编译过程阶段(三个)预编译过程1. JavaScript代码执行之前的预编译案例说明2. 函数执行前的预编译案例说明总结预编译两个小规则:预编译前奏 阶段(三个) 词法语法分析:词法语法分析就是检查JavaScript代码是否有一些低级的语法错误 预编译:本文主讲 执行代码:执行代码就是js引擎解析代码,解析一行执行一行 这章主要讲预编译过程 预编译过程 预编译也分为2个时间点: 第一个是在JavaScript代码执行之前 第二个是在函数执行之前。 但是JavaScript代码

five-five 2122

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JavaScript预编译

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

优快云_Random_Name的博客 1797

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JavaScript的预编译过程

你真的了解javascript的预编译过程吗? 目录你真的了解javascript的预编译过程吗?预编译发生在哪一步呢?js三步曲语法解析预编译解释执行 预编译发生在哪一步呢? 首先要知道js的预编译发生在哪一步 也就是你跟你对象亲热的热火朝天的刚要准备下一步的时候,预编译他来了他来了他骑着白马走来了;你说气不气 预编译是在发生在 这一块代码执行的前一刻 js三步曲 语法解析 语法解析就是,不执行代码通篇看一眼有没有语法错误 比如本应该是一个 英文的分号 ,你这个不争气的手没切换过来键盘 输入成了一个

m0_48557659的博客 903

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JavaScript预编译——谁说js代码是由上到下一行一行执行的?

总所周知,js在运行时,会有三个阶段,分别是: 词法分析阶段 预编译阶段 解释执行阶段

DDboom的博客 1878

Javascript预编译和执行过程

1. 在执行前会进行类似“预编译”的操作:首先会创建一个当前执行环境下的活动对象,并将那些用 var申明的变量设置为活动对象的属性,但是此时这些变量的赋值都是undefined,并将那些以function 定义的函数也添加为活动对象的属性,而且它们的值正是函数的定义。 2.在解释执行阶段,遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到而 且该执行环境的拥有者有pro

u010227447的专栏 1207

JavaScript预编译原理分析

今天用了大量时间复习了作用域,预编译等等知识 看了很多博文,翻开了以前看过的书 发现当初觉得自己学的很明白,其实还是存在一些思维误区 今晚就整理了一下凌乱的思路 先整理一下预编译的知识吧,日后有时间再把作用域详细讲解一下大家要明白,这个预编译和编译是不一样的 JavaScript是解释型语言, 既然是解释型语言,就是编译一行,执行一行 传统的编译会经历很多步骤,分词、解析、代码生成什么

尐轩web前端网络日志 2万+

JavaScript 预编译过程的详细解读

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

Yuki_yuhan的博客 1493

JS预编译过程详解

JS预编译 函数的预编译总是发生在函数执行的前一刻 前奏 一切声明的全局变量都是window的属性; eg var num = 1; console.log(window.num); // --> 1; imply global 暗示全局变量 : 任何一个变量未经声明就赋值,此变量为全局对象所有 ——> 即为window的属性; eg: function test()...

Yomance的博客 920

理解JavaScript预编译过程

首先要知道JavaScript在运行的时候是分为三个阶段: 一、词法语法分析;词法语法分析就是检查JavaScript代码是否有一些低级的语法错误 二、预编译; 三、执行代码;执行代码就是js引擎解析代码,解析一行执行一行 预编译: 下面来详细分析一下: 预编译也分为2个时间点,第一个是在JavaScript代码执行之前,第二个是在函数执行之前。但是JavaScript代码之前之前的预...

6块腹肌的博客 754

JS预编译过程

闭包首先讲预编译过程JS代码执行过程三部曲过程预编译low讲low点真·预编译☞前奏暗示全局变量 imply global真·预编译四部曲 首先讲预编译过程 JS代码执行过程三部曲 过程 语法分析:首先扫描一遍,看有没有低级的语法错误 预编译 解释执行:解释一行执行一行 预编译low讲 函数声明整体提升,变量 的声明提升(这个其实很low,点击low点) 假如没有...

weixin_42716535的博客 916

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

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

sunshine_dd的博客 1135

javaScript预编译过程

预编译发生在代码执行的前一刻,会完成函数声明的提升和变量声明的提升

weixin_46422035的博客 618

JavaScript 预编译与执行机制解析

在深入探讨JavaScript预编译与执行机制之前,我们首先需要明确几个基本概念:声明提升、函数执行上下文、全局执行上下文以及调用栈。这些概念共同构成了JavaScript运行时环境的核心组成部分,对于理解代码的执行流程至关重要。本文将围绕这些核心概念,展开一次深度解析之旅,全面而深入地阐述这一主题。

weixin_53954018的博客 1344
上一篇: JS(七)递归
下一篇: JS(九)作用域、作用域链精解
SteveTang957
博客等级 码龄9年 15粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值