JavaScript执行顺序详解

EtherCAT主站SOEM -- 24 -- 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站 以上就是EtherCAT主站SOEM – 23 – 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。 阅读详情

如果说,JavaScript引擎的工作机制比较深奥是因为它属于底层行为,那么JavaScript代码执行顺序就比较形象了,因为我们可以直观感觉到这种执行顺序,当然JavaScript代码的执行顺序是比较复杂的,所以在深入JavaScript语言之前也有必要对其进行剖析。

1.1按照HTML文档流顺序执行JavaScript代码

首先,大家应该清楚,HTML文档在浏览器中的解析过程是这样的:浏览器是按着文档流从上到下逐步解析页面结构和信息的。JavaScript代码作为嵌入的脚本应该也算做HTML文档的组成部分,所以JavaScript代码在装载时的执行顺序也是根据脚本标签<script>的出现顺序来确定的。

下面实例可以看到代码是从上到下逐步被解析的
<script>
    console.log("顶部脚本");
</script>
<html>
<meta charset="utf-8">
<head>
    <script>
        console.log("头部脚本");
    </script>
    <title></title>
</head>
<body>
<script>
    console.log("页面脚本");
</script>
</body>
</html>
<script>
    console.log("底部脚本");
</script>
输出结果为:

这里写图片描述

1.2预编译阶段与执行阶段的顺序关系

javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”,javascript的预编译是以代码块为范围<script></script>,即每遇到一个代码块都会进行 预编译>执行)

首先科普下javascript中的两种声明方式,var和function,前者声明的是变量,后者声明的是方法。在预编译中,JavaScript对这两种声明做出了两种处理方案

<script>
    var a = "1";       //声明变量a
    function b() {     //声明方法b
        alert();
    }
    var c = function () { //声明变量c
        alert();
    }
</script>

以上代码块中a、c为变量赋值,b为函数声明。当执行以上代码时,首先会进入预编译阶段,对与变量赋值a、c会在内存中开辟一块内存空间并指向变量名,且赋值为undefined;对于函数声明,则同样会进行开辟内存空间,但赋值的对象会将声明的函数赋值给函数名。

预编译阶段:(PS:不管代码中声明变量和声明函数的顺序如何,在预编译阶段会先声明变量,再声明函数)

<script>
    var a = undefined;
    var c = undefined;
    var b = function () {
        alert();
    }
</script>

执行阶段:

<script>
    a = "1";
    c = function () {
        alert();
    }
</script>

整体执行步骤:

<script>
    var a = undefined;
    var c = undefined;

    var b = function () {
        alert();
    };
    a = "1";
    c = function () {
        alert();
    }
</script>

题目:

<script>
    var a = "1";
    function b() {
        alert(a);
        var a = "2";
    }
    b();
</script>

javascript的预编译阶段
1.先预定义变量,再预定义函数
2.变量的预编译只作声明,不作初始化,初始化在执行时
3.function语句定义的函数,不仅声明了函数名,而且函数体也进行了处理
4.匿名函数不会预编译

1.3按块执行JavaScript代码

如果js代码是由多个<script>组成,他们的执行顺序是怎样?
看下面的例子

<script>
    var str = 'world';
</script>

<script>
    function Hello() {
        alert("Hello");
    }
</script>

这样,程序被分成了两段,浏览器在解析文档流时,如果遇到第一个script标签,则JavaScript解释器会等到这个代码块都加载完后,先对代码块进行预编译,然后再执行。执行完毕后,浏览器会继续解析下面的HTML文档流,同时JavaScript解释器也准备好处理下一个代码块。

由于JavaScript是按块执行的,所以如果在一个JavaScript块中调用后面块中声明的变量或函数就会提示语法错误,例如,当JavaScript解释器执行下面代码时就会提示语法错误,显示hello未定义。

<script>
    hello()
</script>

<script>
    function hello() {
        alert("Hello");
    }
</script>

虽然说,JavaScript是按块执行的,但是不同块都属于同一个全局作用域,也就是说,块之间的变量和函数是可以共享的

在实际项目中,往往需要通过src属性引入多个类库来协同使用,这时候要严格区分各个类库的前后引入顺序

1.4 借助事件机制改变JavaScript执行顺序

由于JavaScript是按块处理代码,同时又遵循HTML文档流的解析顺序,所以在上面示例中会看到这样的语法错误。但是当文档流加载完毕,如果再次访问就不会出现这样的错误。例如,把访问第2块代码中的变量和函数的代码放在页面初始化事件函数中,就不会出现语法错误了。

<script>
    window.onload = function () {
        hello()
    }
</script>

<script>
    function hello() {
        alert("Hello");
    }
</script>

为了安全起见,我们一般在页面初始化完毕之后才允许JavaScript代码执行,这样可以避免网速对JavaScript执行的影响,同时也避开了HTML文档流对于JavaScript执行的限制。

同时还有注意,如果在一个页面中存在多个windows.onload事件处理函数,则只有最后一个才是有效的,为了解决这个问题,可以把所有脚本或调用函数都放在同一个onload事件处理函数中,例如:

window.onload = function(){
    f1();
    f2();
    f3();
}
PICO640红外探测器配置模块verilog Ulis pico 640红外探测器配置模块 阅读详情

相关推荐

网格自适应实战 | 攻克超弹性体大变形不收敛难题

本文针对超弹性体(如橡胶)在大变形仿真中因网格严重扭曲导致计算不收敛的难题,提供了基于ANSYS网格自适应技术的实战解决方案。文章详细阐述了从问题诊断、模型准备到核心参数设置的完整流程,并介绍了结合混合U-P单元技术的进阶组合策略,有效攻克了材料压缩等场景下的仿真收敛问题。

week9的博客 518

js中的事件执行顺序梳理

js的事件执行顺序梳理

WANG944282的博客 8498

浅谈一下小波变换和EEG信号处理

浅谈小波变换,总结不是很到位,请大家指正。

qq_45045249的博客 2862

js执行顺序

1.首先js是单线程的 所有的同步任务都是按顺序依次执行的,前面的执行完了之后才会执行后面的任务。遇到计算量大的代码就会阻塞在这里。下面的代码就是打印输出10000次,当循环走完了之后 才会走后面的代码,输出的时间是981ms 输出981ms 2.因为js是单线程的,所有的任务都需要按顺序执行,那如果我在执行过程中开启了一个定时器,定时器延迟10秒执行,后面的代码是不是要十秒之后才执行呢? 测试一下 输出的结果表示:定时器后面的代码先执行了,而定时器里面的代码再10秒后执行了

m0_58709757的博客 1万+

Codesys 3.5报警功能配置保姆级教程:从变量定义到确认方式(含REF/ACK详解)

本文详细介绍了Codesys 3.5报警功能的配置流程,从变量定义到确认方式的选择,特别解析了REF和ACK两种确认方式的底层逻辑。通过实战案例和代码示例,帮助工程师快速掌握报警系统的搭建与调试技巧,提升工业自动化项目的可靠性。

weixin_29245767的博客 458

基于PlatformIO与CMSIS的STM32库函数开发实战:从环境搭建到外设驱动

本文详细介绍了基于PlatformIO与CMSIS的STM32库函数开发实战,从环境搭建到外设驱动实现。通过对比传统IDE,PlatformIO结合CMSIS框架在跨平台开发、代码可移植性和调试体验上更具优势。文章包含PlatformIO.ini配置详解、GPIO/USART驱动开发实例及常见问题解决方案,帮助开发者高效完成STM32项目开发。

weixin_29190169的博客 423

js【深度解析】代码的执行顺序

我们将每一句要执行的 js 代码当做一个任务,则 js 代码可以按照其执行方式的不同,按下图分类微任务:被放入微任务队列(micro task queue)中等待执行的代码因为Promise、async 、await 都是 ES6 语法定义的宏任务:被放入 Web APIs 中等待执行的代码因为 setTimeout 、setInterval 都是浏览器定义的。

朝阳39的博客 2747

双目相机测距原理

普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下:如图所示,P点为相应的物体位置,CL和CR为左右相机光心位置,PL和PR分别为左相机和右相机拍摄的P点成像结果。f为相机焦距,Z为物体距相机的深度距离,b为左右相机基线距离根据几何关系有:则相应的深度信息计算公式为:(1)其中XL-XR为视差。其余在两侧的情况同样可以用几何关系分析得到该表达式(1),即对于普通双目相机测距可以直接通过公式(1)得到深度结果。

doudou2weiwei的博客 4543

JavaScript执行顺序总结

js的执行顺序

qq_41872385的博客 5540

宝塔面板一键部署Z-Blog博客 - 内网穿透实现公网访问

Ubuntu系统作为Linux系统的一个重要分支,既有Linux系统的轻量化、高扩展性和长时间稳定运行,也拥有Windows一样的友好图形界面,因此可以作为熟悉服务器系统的良好选择。对于笔者来说,ubuntu系统最大的用处,就是可以让家里老旧的电脑重焕生机,让本已退居二线的电脑与cpolar内网穿透软件搭配,成为私人服务器,搭建自己喜欢的各种网站。今天,笔者就为大家介绍,如何使用cpolar内网穿透+Z-blog搭建私人博客网站。

m0_74808907的博客 3147

基于AnimeGAN模型生成宫崎骏风格动漫照片

用于动画风格纹理和线条转换的灰度样式丢失;新颖的颜色重建损失,以保留内容图像的颜色;新的灰度对抗损失防止生成的图像从显示为灰度图像;使用深度可分卷积和反向残块的轻量级生成器,以实现更快的传输。实验表明,AnimeGAN可以对真实世界的照片进行变换场景动画风格的图像与高质量的动画视觉效果和显著优于最先进的风格化方法。# 生成宫崎骏风格图片 model = hub . Module('animegan_v1_hayao_60' , use_gpu = True)images:输入的图片数据。

优快云 精品推荐 3630

JavaScript 执行顺序梳理 , 建议收藏!

一.概念 1.解释型语言执行步骤 预编译 扫描上下文。扫描错误 函数和变量声明的提升 解释执行 一条一条执行代码 2.任务队列event queue ????异步任务进入event queue任务队列 所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务

Jack, what else can you do besides holding your little darling? 1607

MAC-电脑中的user文件夹在哪?

MAC-电脑中的user文件夹在哪?

兴趣是最好的老师 1万+

php js顺序执行,JavaScript中关于代码执行的先后顺序问题详解

一、js--->单线程严格意义上来说,javascript没有多线程的概念,所有的程序都是单线程依次执行的。1、什么是单线程?通俗点说,就是代码在执行过程中,另一段代码想要执行就必须等当前代码执行完成后才可以进行。我们拿一段代码来解释一下吧for(var i=1;i<=3;i++){setTimeout(function(){console.log(i); //输出:4,4,4},0)...

weixin_39924179的博客 201

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

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

VC中sqlite的使用

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

php js顺序执行,高性能javascript之加载顺序与执行原理详解

javascript在浏览器中的性能,可以认为是开发者所面临的最严重的可用性问题,本文主要给大家介绍了关于高性能的javascript之加载顺序与执行原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。当浏览器遇到标签的时候,浏览器必须先话时间下载外链的文件然后并执行,在这过程中,页面渲染和用户交互是完全被阻塞的。脚...

weixin_34898320的博客 327

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

javascript运行机制之执行顺序详解 (js 重点基础)

JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行。如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而出,四处乱窜。 那么JavaScript是怎么来进行解析的吗?它的执行顺序又是如何的呢?在了解这些之前,我们

qq_23476319的博客 482

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Javascript执行顺序详解

JavaScript是一种描述型脚本语言,它不同于Java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行。如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握JavaScript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而出,四处乱窜。那么JavaScript是怎么来进行解析的吗?它的执行顺序又是如何的呢?在了解这些之前,我们先来认

Mike_ToUp 574

详解:JavaScript事件循环机制(event loop), js运行机制(执行顺序)

Event Loop(事件循环)是 JavaScript 的执行机制(执行顺序)

qq_47230378的博客 2020

html语言的执行顺序,原生JavaScript 运行机制中执行顺序详解

JavaScript 运行机制之执行顺序详解HTML5学堂:JS的解析过程分为两个阶段:预编译期与执行期。预编译期JS会对本代码块中的所有声明的变量(var声明的变量)和函数进行处理,但需要注意的是此时处理函数的只是声明式函数,而且变量也只是进行了声明但未进行初始化以及赋值。1、代码块定义:JavaScript中的代码块是指由标签分割的代码段。代码块一代码块二定义:JS是按照代码块来进行编译和执行...

weixin_29324401的博客 437

详解JavaScript异步执行顺序

JavaScript中,一般代码都是自上而下执行,但有了异步,就不一定是自上而下,我们需要从底层的执行去理解执行的顺序

zem 1654

javascript运行机制之执行顺序详解 -转

javascript运行机制之执行顺序详解2014-01-20 11:51:33 -转 来源:【雾里看花】的专栏写的是真不错!!! JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行。如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执...

Bi-Hu的博客 125

js执行顺序详解(转)

转自:http://www.admin10000.com/document/3752.html JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行。如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而出,四处乱窜...

yournevermore的博客 5120

javascript运行机制之执行顺序详解

JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行。如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而出,四处乱窜。那么JavaScript是怎么来进行解析的吗?它的执行顺序又是如何的呢?在了解这些之前,我们先来认

kevin@hbstu.net 1021

JavaScript 的 async/await 执行顺序详解

async/await 执行顺序详解 JavaScript 中的 async/await 是 AsyncFunction 特性 中的关键字,从字面意思来理解:async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。 先简单介绍一下async/await。 async/await 是一种编写异步代码的新方法。之前异步代码的方案是回调和 promise。 asy

硬澳钾的博客 7427

js执行顺序详解

转载:点击打开链接1.函数的声明与调用JavaScript是一种描述型脚本语言,由浏览器进行动态的解析与执行。函数的定义方式大体有以下两种,浏览器对于不同的方式有不同的解析顺序。//定义式函数定义function Fn1(){ alert("hello"); }//赋值式函数定义 var Fn1 = function(){ alert("hello"); }页面加载过程中,浏览器会对页面上或载入的

guoxu_guoxu的博客 786

javascript 执行顺序详解

  JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行。如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而出,四处乱窜。   那么JavaScript是怎么来进行解析的吗?它的执行顺序又是如何的呢?在了解...

weixin_33695082的博客 598
下一篇: Django CMS教程一:安装
DaGeger
博客等级 码龄9年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值