JavaScript运行过程中的“预编译阶段”和“执行阶段”

yizhihongxing

JavaScript代码的运行分为两个阶段:预编译阶段和执行阶段。在预编译阶段,JavaScript引擎会进行一些预处理操作,包括变量声明、函数声明、变量提升等。执行阶段则是按照预处理结果进行实际代码的执行。

预编译阶段

变量声明

在预编译阶段,JavaScript引擎会将代码中所有的变量声明存储到作用域中。例如:

console.log(a); // undefined
var a = 1;

对于以上代码,在预编译阶段,JavaScript引擎会将变量a声明并存储到全局作用域中。在执行阶段,代码console.log(a)会被执行,此时变量a的值是undefined

函数声明

在预编译阶段,JavaScript引擎会将代码中所有的函数声明存储到作用域中。例如:

foo();
function foo() {
  console.log('hello');
}

对于以上代码,在预编译阶段,JavaScript引擎会将函数foo声明并存储到全局作用域中。在执行阶段,代码foo()会被执行,输出hello

执行阶段

在执行阶段,JavaScript引擎会按照预处理结果进行实际代码的执行。例如:

var a = 1;
console.log(a); // 1

foo();
function foo() {
  console.log('hello');
}

在执行阶段,变量a的值为1,代码console.log(a)会输出1。函数foo在预处理阶段已经声明,因此在执行阶段代码foo()会输出hello

示例

示例1:变量提升问题

console.log(a); // undefined
var a = 1;

在执行阶段,变量a的值是undefined,因此代码console.log(a)会输出undefined

示例2:变量和函数名同名问题

var foo = 'hello';
function foo() {
  console.log('world');
}
console.log(foo); // 'hello'

在预处理阶段,变量foo和函数foo都会存储到全局作用域中。同时,变量foo在赋值为'hello'。在执行阶段,代码console.log(foo)会输出hello,因为此时foo指向的是变量,而不是函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript运行过程中的“预编译阶段”和“执行阶段” - Python技术站

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

相关文章

  • JavaScript:ES2019 的新特性(译)

    JavaScript: ES2019 的新特性(译) 本文将详细介绍 ES2019 中新增的一些功能。 Object.fromEntries() Object.fromEntries() 方法将键值对Array转换为对象。这个工具方法很有用,因为它可以让我们快速方便地构建一个新对象。 例如,我们有一个键值对数组,如下所示: const entries = […

    JavaScript 2023年6月10日
    00
  • jquery实现初次打开有动画效果的网页TAB切换代码

    下面是详细的攻略: 需求分析 需要用jquery实现一个带有切换动画效果的网页TAB切换功能。具体要求如下: 初次加载页面时,选中第一个TAB页面,其他TAB页面隐藏。 点击某个TAB按钮时,该按钮对应的TAB页面显示,并向左边滑动展示。 再次点击该TAB按钮时,该页面向右边滑动隐藏。 代码实现 实现思路: 通过jquery选择器找到所有的TAB按钮和页面元…

    JavaScript 2023年6月10日
    00
  • Javascript简写条件语句(推荐)

    当需要根据某个条件来执行不同的代码块时,我们可以使用条件语句来实现。在JavaScript中,有多种实现条件语句的方式,而本攻略将介绍一种简写条件语句的实现方式。 简写条件语句的语法 简写条件语句的语法基于三元运算符:condition ? expr1 : expr2。它具有以下结构: condition ? expr1 : expr2 这行代码的意思是,如…

    JavaScript 2023年5月28日
    00
  • JS网页在线获取鼠标坐标值的方法

    下面是关于JS网页在线获取鼠标坐标值的方法的完整攻略。 1. 安装并引入jQuery 如果要在线获取鼠标坐标值的话,可以使用jQuery库中的mousemove事件。因此,首先需要安装并引入jQuery。 <!– 引入jQuery库 –> <script src="https://cdn.bootcdn.net/ajax/li…

    JavaScript 2023年6月10日
    00
  • js实现获取鼠标当前的位置

    获取鼠标当前位置是开发中常需要用到的功能之一。JavaScript可以轻松实现该操作。以下是获取鼠标当前位置的完整攻略。 获取鼠标当前位置的方式 常用的方式是利用鼠标移动事件,不断获取鼠标当前位置的横纵坐标。可以用鼠标移动事件mousemove来实现。 实现代码 下面是一个基本的 JavaScript 实现: document.addEventListene…

    JavaScript 2023年6月11日
    00
  • 原生js实现节日时间倒计时功能

    对于网站开发者来说,实现节日倒计时功能是一个很有趣的项目。下面是实现节日时间倒计时功能的完整攻略: 1. HTML 结构 <p id="countdown"></p> 在 HTML 中建立一个计时器的 DOM 元素,在本例中是一个段落元素,被赋予 ID 为 countdown。 2. JavaScript 代码 创…

    JavaScript 2023年5月27日
    00
  • JavaScript 拖放效果代码

    下面我会详细讲解“JavaScript 拖放效果代码”的完整攻略,包括整体思路和具体实现方法,同时会提供两个示例说明。 整体思路 JavaScript 拖放效果代码的实现需要遵循以下几个步骤: 获取拖拽源和拖拽目标元素; 为拖拽源元素绑定 mousedown 事件,并在该事件中记录鼠标按下时的位置信息; 为拖拽源元素绑定 mousemove 事件,该事件会在…

    JavaScript 2023年6月10日
    00
  • JavaScript 字符串与数组转换函数[不用split与join]

    下面是“JavaScript 字符串与数组转换函数[不用split与join]”的完整攻略。 为什么不用split和join 在讲解字符串与数组转换函数之前,我们先来谈谈为什么要不用split和join。split和join是JavaScript中常用的字符串与数组转换函数,但是在某些场景下,特别是在大数据量时,使用这两个函数会影响效率,因此需要考虑其他的转…

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