你了解JavaScript的js运行三部曲吗

yizhihongxing

当浏览器加载一个包含JavaScript代码的网页时,JavaScript代码的执行流程一般会遵循以下三个步骤:

1. 解析代码

浏览器首先会将包含JavaScript代码的网页进行解析,在这个过程中,会对JavaScript代码进行词法分析和语法分析。

  • 词法分析:JavaScript代码中包含了各种不同类型的词汇单元,例如关键字、标识符、操作符等等,词法分析的作用就是将代码中的每一个词汇单元都进行分词,并给每个词汇单元打上相应的类型标记。
  • 语法分析:语法分析的主要作用就是根据词法分析的结果,将代码转化为语法树,检查代码是否符合语法规范。

2. 创建执行上下文

执行上下文(Execution Context),简称上下文,是JavaScript代码执行时的一个抽象概念。每当JavaScript代码执行时,都会创建一个上下文对象,用于存储代码执行期间的各种信息,例如当前代码的运行状态、变量、函数等等。创建上下文的过程包含了以下几个步骤:

  • 创建变量对象:在上下文被创建时,会首先创建一个变量对象(Variable Object),用于存储当前上下文中定义的变量和函数声明。
  • 确定this指向:this是JavaScript的一个关键字,它指向当前执行函数的执行上下文,this指向的上下文在调用函数时会动态确定,例如在一个对象方法中,this指向该对象本身。
  • 创建作用域链:JavaScript是一门词法作用域的编程语言,作用域链用于解析变量的访问权限,创建作用域链的过程包含了当前上下文嵌套的所有父级上下文。
  • 确定外部引用:JavaScript代码中经常会有一些外部的引用,例如闭包、eval等等,确定这些外部引用是关键之一。

3. 执行代码

最后,当上下文创建完成后,就可以执行JavaScript代码了。在执行的过程中,JavaScript引擎会先按照语法树的结构逐条执行语句,期间还会有大量的操作,例如函数调用、读写变量等等。

代码的执行过程受到许多因素的影响,例如函数调用栈、事件循环等等。如果代码中存在异步操作,例如setTimeout、Promise等等,则会被加入到事件队列中,等待当前执行的代码全部完成后再执行。

以下示例展示了一个简单的JavaScript代码,演示了解析、创建上下文以及执行三个步骤:

console.log("Start");

function multiply(a, b) {
  return a * b;
}

const result = multiply(3, 4);

console.log(result);

console.log("End");

输出结果为:

Start
12
End

在执行的过程中,JavaScript引擎执行了以下操作:

  1. 解析函数和变量声明,创建上下文对象;
  2. 执行console.log("Start"), 输出 "Start";
  3. 执行multiply(3, 4)函数,返回12;
  4. 将返回结果赋值给result变量;
  5. 执行console.log(result),输出12;
  6. 执行console.log("End"), 输出"End"。

除此之外,由于简单的代码没有进行异步操作,没有涉及到事件队列和事件循环的相关内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:你了解JavaScript的js运行三部曲吗 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • JS获取数组最大值、最小值及长度的方法

    获取数组最大值、最小值及长度的方法在JavaScript中非常常用,本文将详细讲解这方面的知识,步骤如下: 1. 先定义一个数组 在JavaScript中,可以通过[]或Array()函数来定义一个数组。例如: var arr = [1, 3, 5, 7, 9]; 2. 获取数组长度 获取数组长度的方法是使用数组的length属性,例如: console.l…

    JavaScript 2023年5月27日
    00
  • js调试系列 初识控制台

    JS调试系列——初识控制台 什么是控制台 控制台是浏览器提供的调试工具,可以用来查看JavaScript代码的运行情况,如代码执行顺序,变量的值等。控制台可以输出信息,查看调用堆栈,进行代码地图等操作。Chrome浏览器的控制台是最为强大的。 打开控制台 在Chrome浏览器中,可以通过快捷键 Ctrl + Shift + J 打开控制台。也可以右键页面空白…

    JavaScript 2023年5月27日
    00
  • javascript this用法小结

    当在JavaScript中调用函数时,常常使用this关键字来指向当前正在调用的函数。但this实际上有不同的使用方式,本篇文章将会对这些用法进行总结和说明。 1. 函数调用 当在函数内部直接使用this时,它将指向全局对象(浏览器中的window对象)。 function foo() { console.log(this); // window } foo…

    JavaScript 2023年5月18日
    00
  • javascript进行四舍五入方法汇总

    JavaScript 进行四舍五入方法汇总 在JavaScript中,进行四舍五入操作的方法有多种,下面将为大家详细介绍其中常用的几种方法。 一、toFixed() toFixed() 方法可把 Number 四舍五入为指定小数位数的数字,并将结果以字符串形式返回。 下面是一个示例: var num = 3.14159; console.log(num.to…

    JavaScript 2023年5月28日
    00
  • JavaScript函数防抖与函数节流的定义及使用详解

    JavaScript函数防抖与函数节流的定义及使用详解 函数防抖和函数节流是 JavaScript 常用的两种优化方案。它们可以延迟函数的执行,减少频繁请求和高频事件造成的性能问题。 一、函数防抖 在 JavaScript 中,如果频繁触发某个事件,比如输入框输入,鼠标滚动等,可能会造成函数频繁执行,影响性能。而使用函数防抖可以延迟函数的执行,只有等到一段时…

    JavaScript 2023年5月27日
    00
  • JavaScript中用toString()方法返回时间为字符串

    在JavaScript中,我们可以通过使用toString()方法将时间对象转换为字符串。toString()方法是Date对象原型上定义的方法,其返回一个代表时间的字符串,以本地时间为准。 以下是使用toString()方法返回时间字符串的步骤: 创建一个日期对象 let myDate = new Date(); 调用toString()方法将日期对象转化…

    JavaScript 2023年5月27日
    00
  • vue如何监听页面缓存事件

    我们可以通过Vue的生命周期函数来监听页面缓存事件,其中包括 beforeRouteLeave 和 beforeRouteEnter 这两个函数。 beforeRouteLeave beforeRouteLeave 是在Vue组件即将被离开路由时被调用的函数,我们可以在这个函数中做一些路由离开前的准备工作,比如保存一些数据、询问用户是否需要保存等。 示例一:…

    JavaScript 2023年6月11日
    00
  • JavaScript实现时钟特效

    以下是详细的JavaScript实现时钟特效的攻略,希望可以对您有帮助。 1. 准备工作 在开始制作JavaScript时钟特效之前,需要先做一些准备工作。包括HTML代码及CSS样式的编写。根据设计需求,制作一个表盘,盘面可以是圆形的或者其他形状。然后在表盘上加上时针、分针、秒针等元素,并通过CSS样式进行美化。 以下是制作样本的HTML代码示例: &lt…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部