JavaScript 预编译

57 阅读2分钟

前言

预编译(Hoisting)是 JavaScript 中的一种行为,它在代码执行之前对变量和函数进行提升(Hoist)操作。预编译是 JavaScript 引擎在执行代码之前的一个阶段,用于处理变量和函数声明的注册和初始化.

在预编译阶段,JavaScript 引擎会将变量和函数的声明提升到作用域的顶部,这意味着可以在声明之前使用它们。具体来说,JavaScript 引擎会执行以下操作:

一、变量声明的提升

  1. 变量声明(使用 var、let 或 const 关键字)会被提升到作用域的顶部,但是变量的赋值操作会保留在原来的位置。
  2. 使用 var 声明的变量会被初始化为 undefined,而使用 let 和 const 声明的变量则不会被初始化。
console.log(myVariable); // 输出:undefined
var myVariable = 10;

console.log(myVariable); // 输出:10

// 第一个输出的提升过程类似这样
var myVariable
console.log(myVariable) // myVariable这里没有赋值 所以输出 undefined

myVariable = 10
console.log(myVariable); // 输出:10

二、函数声明的提升

  1. 函数的声明会被完整地提升到作用域地顶部,包括函数的名称和函数体
  2. 函数声明的提升的优先级高于变量声明
myFunction(); // 输出:Hello, world!

function myFunction() {
  console.log("Hello, world!");
}

在上述代码中,函数 myFunction 在声明之前被调用,但是它可以正常执行并输出 "Hello, world!"。这是因为函数声明会完整地被提升到作用域的顶部。

需要注意的是,只有函数声明才会被完整提升,而函数表达式(使用函数字面量或匿名函数)则不会被提升。

预编译是 JavaScript 中的一种行为,它有助于理解变量和函数在作用域中的行为。了解预编译可以避免一些潜在的问题,并更好地理解 JavaScript 代码的执行顺序。

结语:

到这里,我们就完成了函数和作用域的学习了,学习可能是枯燥的,但是他会慢慢的反馈你,或许当你某个午后坐在沙发上,阳光洒进你的客厅,地上的阳光和时间慢慢的重合,直到一声巨响!你猛的抬头一看,恍惚之间,你又想到了那天,回忆慢慢涌上心头。你想起你迈出学习编程的那天,想起那些曾经的困惑,想起一次次调试,解决问题的瞬间。这时,你突然发现你已经成为一个熟练的开发者,那些你夜以继日独自学习的时光,为你今天的能力打下了夯实的基础。 好了,下一节,我将带大家学习控制流语句。如果每一章有任何意见和改进,欢迎大家提出问题,笔者,会每个都看的。让我们后面再见,芜湖~~~