JavaScript预解析的一些理解

JavaScript 预解析 一、JavaScript 预解析 1. 预解析 JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析和代码执行 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义 代码执行: 从上到下执行JS语句。预解析只会发生在通过 var 定义的变量和 function 上。学习预解析能够让我们知道为什么在变量声明之. 阅读详情

在理解预解析之前,我们首先要知道:

    1.预解析指的是什么?

    2.预解析可以帮助我们解决什么样的问题?

1.预解析指的就是,在js文件或者script里面的代码在正式开始执行之前,进行的一些解析工作。这个工作很简单,就是在全局中寻找var关键字声明的变量和通过function关键字声明的函数。

2.和作用域一样,预解析和作用域这些现象(或者说是概念的东西),并不能因此使我们写出什么优秀的代码,但是能在开发的过程中,使我们理清思路,解答我们的困惑,对JS执行的过程更加的清晰和了解,对程序的运行更有把握,在面试和开发中也会更加的自如。

注意 :

    1.只有变量和函数才才会发生声明提升,并且变量在提升声明的时候不会赋值,默认值是undefined,函数声明也不会将函数调用。

    2.通过声明提升,函数可以在声明的函数体之上进行调用,变量也可以在赋值之前进行输出,而不会报错,因为如果直接输出一个没有声明的变量会报错。

 
f1();              // 'hello'
 function f1() { 
 console.log('hello'); 
}                   // 此时预解析函数 f1 声明提升, 所以上面的调用控制台中调用不会报错
console.log(num);   // undefined  此时预解析变量 num 声明提升(没有赋值)
var num = 5;        //  所以上面在控制台中调用不会报错,只是显示 undefined

通过画图的方法可以很清楚知道预解析的发生过程.

// 案例1
 var a = 25;
 function abc() {
   alert(a); 
   var a = 10;
 }
 abc();

相信大家通过上面画的这个图可以很清楚的看出这段代码预解析执行的过程。

 // 案例二
var color = "red";
   function outer() {
       var anotherColor = "blue";
       function inner() {
           var tmpColor = color;
           color = anotherColor;
           anotherColor = tmpColor;
           console.log(anotherColor);     // red
       }
       inner();
   }
   outer();
   console.log(color);                    // blue 
// 案例三
var name3 = "zs";
function f3() {
    var name3 = "ls";
    function f4() {
        name3 = "ww";
    }
    f4();
    console.log(name3);   // ww
}
f3();
console.log(name3);       // zs

在这里我们能看的出来当最内部的函数没有使用var声明变量时候,会通过作用域链向上级的函数寻找该值,一旦在外层找到该值,就不会再向外寻找,所以笼统的说不加var声明的变量也不太准确,就像这种情况。

 // 案例四
function f1() {
   var a = b = c = 9;
  console.log(a);    // 9
  console.log(b);    // 9
  console.log(c);    // 9
}
 f1();
 console.log(c);     // 9
 console.log(b);     // 9
 console.log(a);     // a is not defined

这里有一个坑相信大家已经看出来了。在声明多个变量的时候,运算符是逗号,如果是等号并不是集体声明。

看到这里相信大家已经对预解析有了一定的理解,最后也祝大家学习顺利,工作顺利。

IMDb影评数据集:从下载到情感分析实战指南 本文提供了IMDb影评数据集从下载、探索到情感分析建模的完整实战指南。详细介绍了数据预处理、TF-IDF向量化方法,并对比了逻辑回归、随机森林、SVM及LSTM深度学习模型在情感分析任务上的应用与效果评估,帮助读者系统掌握自然语言处理的核心流程。 阅读详情

相关推荐

OFDM接收机同步——分组检测

上一篇讲了OFDM发射机中的长短训练序列生成原理,基于此可以得到长短训练序列的准确数值,为接收机中的符号同步中的相关运算提供基础。 进入符号同步前,首先来看OFDM接收机中的第一步——分组检测。分组检测就是检测突发传输方式的信道上是否有新的数据到达,算法的好坏直接影响着接收机的后续工作性能。 一、本文意义 基于《基于xilinx fpga 的ofdm的通信系统基带设计》这本教材中分组检测算法原理,通过matlab编程仿真验证“延时相关+保持长度”分组检测算法的有效性。同时,通过仿真证明教材上的判决公式的问题

boayel的博客 2200

JavaScript预解析

一、预解析是什么? 预解析:就是提前解析代码。        JS代码的执行是由浏览器中的JS解析器(可以理解为浏览器)来执行的。JS解析器执行JS代码的时候,分为两个过程:预解析过程和代码执行过程 //关于变量的预解析 // 没有声明变量,直接输出会报错 console.log(num); var num; // 声明变量,没有赋值,此时这个变量的值为undefined console.log(num); // 声明并数值num,在

qq_54282411的博客 648

Gradient Accumulation 梯度累加/梯度累积 (Pytorch)

我们在训练神经网络的时候,batch_size的大小会对最终的模型效果产生很大的影响。一定条件下,batch_size设置的越大,模型就会越稳定。batch_size的值通常设置在 8-32 之间,但是当我们做一些计算量需求大的任务(例如语义分割、GAN等)或者输入图片尺寸太大的时候,我们的batch size往往只能设置为2或者4,否则就会出现 “CUDA OUT OF MEMORY” 的不可抗力报错。 那么如何在有限的计算资源的条件下,训练时采用更大的batch size...

hxxjxw的博客 5801

JavaScript基础--预解析详解

变量预解析 函数预解析

zxn200125的博客 314

大模型多智能体协作面试题及参考答案

在多智能体系统里,代理定义自身目标或效用函数的过程与系统架构、应用场景紧密相关。从本质上讲,目标是代理行为的导向,而效用函数则是对目标达成程度的量化评估。代理通常依据自身角色、系统全局需求以及与其他代理的交互关系来确立目标。比如在合作型 MAS 中,代理目标可能需要与全局目标对齐,像多个物流机器人协作完成货物配送时,每个机器人的目标会围绕 “高效完成分配任务”“避免路径冲突” 等展开,其效用函数可能涉及任务完成时间、能耗等指标的加权求和。目标定义的方式存在多种类型。

大模型大数据攻城狮的专栏 1022

1.为什么要学习SIMULINK

用户也可以自定义和创建自己的模块,利用这些模块,用户可以创建层次化的系统模型,可以自上而下或自下而上地阅读模型,也就是说,用户可以查看最顶层的系统,然后通过双击模块进入下层的子系统查看模型,这不仅方便了工程人员的设计,而且可以使自己的模型方块图功能更清晰,结构更合理。此外,利用示波器模块或其他的显示模块,用户可以在仿真运行的同时观察仿真结果,而且还可以在仿真运行期间改变仿真参数,并同时观察改变后的仿真结果,最后的结果数据也可以输出到MATLAB工作区进行后续处理,或利用命令在图形窗口中绘制仿真曲线。

FPGA/MATLAB学习教程/源码/项目合作开发 1546

JS预解析

目录 一、什么是预解析 二、预解析 2.1、变量预解析 2.2、函数预解析 三、声明注意事项 四、变量提升原因 一、什么是预解析 预解析是指在当前作用域下,JavaScript 代码执行之前,浏览器会默认把带有 var 和 function 声 明的变量在内存中进行提前声明或者定义。 示例: <script> a = 2; var a; console.log(a);//2 </scri

mengfanshaoxia的博客 1192

YOLOv11改进-上采样 | EUCB高效上卷积块,实现特征图尺度匹配和高效上采样

本文介绍了一种在YOLOv11目标检测模型中引入高效解码器模块EMCAD的创新方法,以提升模型在资源受限场景下的性能与效率。EMCAD由多个模块构成,其中核心的EUCB(高效上卷积块)通过上采样、深度可分离卷积、激活归一化和通道调整等操作,兼顾了特征质量与计算成本。实验结果显示,该模块在显著减少参数与FLOPs的同时仍具备优异性能。文章还提供了完整的YOLOv11模型集成流程、配置和训练实战。

魔改工程师的博客 1540

什么是预解析

预解析就是预先解析function和var,其中值得注意,若同名,function大于var,预解析我觉得光说没有,还是有例子更容易理解。 1.关于var <script> alert(test);//undefined var test="hello,world"; alert(test);//hello,world </script> 我们可以看到,变量test确实会预解析,所以,一开始就输出alert不会报错,但是为什么

m0_38043319的博客 3084

云端全自动AI漫剧生成工作流:从模型选型到完整实现

本文提出了一套云端全自动AI漫剧生成工作流解决方案,旨在解决传统漫剧制作效率低下的问题。该系统采用"编排引擎+模型矩阵"架构,通过集成大语言模型、图像生成、视频合成等技术,实现从剧本输入到成片输出的全流程自动化。 核心内容包括: 模型选型方案:剧本解析采用DeepSeek-V3/GPT-4o,图像生成使用DALL-E 3,视频合成选用Stable Video Diffusion,语音合成采用MiniMax TTS 系统架构设计:基于Celery分布式任务队列的编排层,分解任务至各功能模块

huanghm88的专栏 640

性能优化-高通cDSP(QDSP6)架构详解

高通cDSP开发的商业价值30秒快速认识高通cDSP开发的商业价值【高通cDSP旨在处理一些简单但需要大量计算的场景,如图像处理、科学计算、AI训练、计算机视觉等。这些场景使用CPU来运算会极大的降低CPU的吞吐量,因此利用现代寄存器较宽的特性设计出了适配数据并行的DSP芯片,cDSP就是典型的代表。利用cDSP+CPU既可以满足一般的使用场景,也可以完成现代图像和视频数据的处理。

发狂的小花的博客 5943

Javascript变量提升预解析的理解

预解析 JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程 预解析过程: 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。 先提升var,在提升function。 变量提升 ...

weixin_42899305的博客 288

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Js预解析-变量提升和函数提升理解

JavaScript基础 预解析 1 预解析概述 JavaScript 解析器在运行 JavaScript 代码时,分为两步:预解析和代码执行。 预解析:每执行一个作用域里的代码前,会把该作用域内,通过 var 和 function 关键字声明的变量在内存中进行声明。 代码执行: 从上到下执行JS语句。 预解析效果等价于:变量和函数的声明隐式地插放到该作用域代码的第一句,然后顺序执行代码。 2 变量预解析 预解析也叫变量、函数提升。 变量提升(变量预解析): 变量的声明会被提升到当前作用域的

小硅壳的博客 374

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JavaScript预解析理解

JavaScript预解析 首先什么是预解析? 1.预解析指的就是,在js文件或者script里面的代码在正式开始执行之前,进行的一些解析工作。这个工作很简单,就是在全局中寻找var关键字声明的变量和通过function关键字声明的函数 1.我们js引擎运行js分为两步:预解析 代码执行 (1)预解析js引擎会把js里面所有的var 还有function提升到当前作用域的最前面 (2)代码执行:按照代码的顺序从上往下执行 2.预解析分为 变量预解析(变量提升)和函数预解析(函数提升) (1)变量提升 就是

weixin_45825351的博客 252

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JavaScript——预解析理解

JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过《JavaScript权威指南》及网上相关资料了解到,JavaScript有“预解析”行为。理解这一特性是很重要的,不然在实际开发中你可能会遇到很多无从解析的问题,甚至导致程序bug的存在。为了解析这一现象,也作为自己的一次学习总结,本文逐步引导你来认识JavaS

见证自己的成长之路~ 679

Javascript预解析的理解与案例

JavaScript代码是由浏览器中的JavaScript解析器来执行的。 JavaScript解析器在运行JavaScript代码的时候分为两步:预解析和代码执行。 1.js引擎运行js分为两步:预解析和代码执行 (1).预解析js引擎会把js里面所有的var还有function提升到当前作用域的最前面 (2).代码执行按照代码书写的顺序从上往下执行 2.预解析分为变量预解析(变量提升)和函数预解析(函数提升) (1)变量提升就是把所有的变量声明提升到当前的作用域最前面,...

fylxy000的博客 224

【JavaScript】预解析理解

预解析:js引擎会把js里面所有的var声明和函数声明。对function,不提升函数体,只提升【函数声明】对var,不提升赋值操作,只提升【定义,声明】的最前面,然后按照代码顺序从上往下执行。js在执行代码会先预解析在执行代码。...

weixin_44774410的博客 359

直观理解js预解析

预解析 所谓预解析,就是在js代码解析之前,浏览器会把所有带var和function关键字声明地变量或函数进行提前地声明和定义 js代码的执行是分成两个阶段的,首先预解析,然后再一行一行去解析代码 预解析的过程 : 将var关键字声明的变量提升到所在作用域的最前面,赋值不会提升,默认值是undefined 将function关键字声明的函数提升到当前作用域的最前面,且同时会定义 函数表达式只用预...

sinat_41660714的博客 252

在js中的预解析规则理解

一.作用域 作用域:作用的范围,指的是函数在哪些范围内可以用,而在其他部分就不可以使用,如果需要使用就需要重新定义。也可以理解为程序源代码中定义的这个变量的区域。 作用域的作用:用来执行读或者写的操作。 二、预解析规则 预解析规则: 对于script是自上而下进行解析,对于函数是由里到外进行解析。 浏览器在执行JS代码的时候会分成两部分操作:预解析以及逐行执行代码。 预解析:浏览器在开始工...

浮生离梦的博客 1620

JavaScript基础——JS预解析

JS引擎运行js代码,分为两部分:JS预解析+代码执行 JS预解析 JS预解析的含义:就是把JS中所有的var和function提升到当前作用域的最前面 JS预解析包含两个部分:变量预解析+函数预解析 预解析的过程中,还是按照代码从上到下执行的。 变量预解析(变量提升) 变量提升:把js中所有的变量(通过var声明的)提升到当前作用域的最前面,但是不提升赋值操作 varnum=...

爱前端的程序媛的博客 473

js预解析题目

1. 定义 预解析:在当前作用域下,js运行之前,会把带有var和function关键字的事先声明,并在内存中安排好。然后再从上到下执行js语句。 预解析只会发生在通过var定义的变量和function上。 2. var 通过var关键字定义的变量进行预解析的时候:都是声明declare,不管它有没有赋值,都会赋值undefined。 只要是通过var定义的,不管是变量,还是函数,都是先...

到得还来别无事,庐山烟雨浙江潮。 1081

两个实例轻松理解js函数预解析

js函数预解析 例子1: 先上一段代码,看看能不能写出最终的执行结果. console.log(a); var a = 1; console.log(a); function a(){ console.log(2); } var a = 3; console.log(a); function a(){ ...

happyCoding1024的博客 815

深入理解JavaScript的预解析机制

JavaScript预解析机制是理解代码执行的关键。本文解析了预解析的两个核心阶段:变量提升(仅提升声明,不提升赋值)和函数提升(整体提升),并指出函数提升优先级更高。通过典型案例分析,揭示了变量作用域、同名覆盖等常见问题。文章还对比了var、let、const的差异,帮助开发者避免因提升机制导致的代码陷阱,掌握更规范的编程实践。理解这些机制对编写可靠JavaScript代码至关重要。

pzhdv的博客 779

JavaScript——作用域和预解析,深度理解代码执行程序

js作用域和预解析,深度理解代码执行程序,让你理解的更透彻,以及最后附上一个小练习,可以思考一下,并总结这篇所有的内容

zhaochen1127的博客 3514
下一篇: async-await让你的异步代码更加优雅
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值