在JavaScript中提起:了解内部工作
#javascript #编程 #es6 #hoisting

提升是JavaScript中的一个基本概念,但并不总是容易理解。在提升的基本版本中,变量和功能声明被移至各自范围的顶部。但是,在高级提起术中,我们更深入地研究了JavaScript的内部工作,并发现了一些更复杂的行为。

在本文中,我们将探索JavaScript中的一些高级提升功能,包括块级吊装,与Let and const搭配,并与课堂吊装。

块级提升

在ES6中,引入LET和CONST关键字改变了变量的声明和吊装方式。与VAR关键字不同,Let and and Const是块分组的,无法在其块外访问。

使用let或const声明变量时,它不会将其悬浮在其范围的顶部。取而代之的是,变量声明保留在块内的原始位置。这意味着,如果您尝试在声明之前访问LET或CONST变量,则将获得参考。

考虑以下示例:


{
  console.log(foo); // ReferenceError: foo is not defined
  let foo = "bar";
}

在此代码中,使用让块内声明变量foo。当我们尝试在声明FOO的值之前记录其值时,我们会得到一个参考。这是因为让和const变量没有悬挂到其块的顶部。

用Let and Const

提升

尽管Let and and const变量没有悬挂到其范围的顶部,但它们仍然在某种意义上被吊起。当使用let或const声明变量时,它是在JavaScript引擎的创建阶段分配的内存。

变量以未定义的值初始化,就像var声明的变量一样。但是,与VAR不同,变量在声明之前无法访问。这是因为在处理声明之前无法访问和const变量。

考虑以下示例:


console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
let foo = "bar";

在此代码中,我们尝试在初始化FOO的值之前记录其值。但是,我们获得了一个参考器,因为该变量在初始化之前无法访问。

与类吊销

es6引入了类关键字,该字符提供了一种更熟悉的语法,用于在JavaScript中创建对象。但是,像功能一样,课程也受到提升。

定义了一个类时,将整个类声明悬挂在其范围的顶部。这意味着您可以在代码中声明之前创建一个新实例。

考虑以下示例:


const foo = new Foo();

class Foo {
  constructor() {
    console.log("Hello, world!");
  }
}

在此代码中,我们在宣布该类FOO之前创建了一个新实例。但是,由于课程悬挂到其范围的顶部,因此该代码将按预期工作。

结论

JavaScript中高级提升可能是一个棘手的概念,但这是成为熟练的JavaScript开发人员的重要组成部分。通过了解提升的内部运作,您可以编写更有效的代码,以利用此功能强大的功能。