关闭:JavaScript中的一个强大概念
#javascript #编程 #react #关闭

封闭是JavaScript中一个有力的概念,可能会使初学者理解。但是,一旦您了解关闭,就可以利用它们编写更有效的代码。在本文中,我们将探讨什么是关闭,它们的工作方式以及如何在JavaScript中使用。

什么是关闭?

闭合是一个函数,即使外部函数返回,也可以从其外词法范围访问变量。换句话说,闭合允许函数访问其外部函数中的变量,即使外部函数完成执行。这是可能的,因为JavaScript为每个函数创建一个新的执行上下文,该上下文可以访问其父执行上下文。

关闭如何工作?

在JavaScript中,功能是一流的公民,这意味着它们可以像变量一样以价值传递。执行函数后,创建了一个新的执行上下文,其中包含一个新的变量环境,其中包含函数中声明的任何变量。但是,如果一个函数声明不在其范围内的变量,则JavaScript将在父范围中寻找变量,直到它找到它为止。

当另一个函数内定义一个函数时,它会创建闭合。即使在返回外部函数之后,内部函数也可以访问外部函数的变量和参数。这是因为内部函数保留了对外部函数变量的引用,该变量存储在闭合中。

如何使用封闭?

可以在JavaScript中以多种方式使用封闭。封闭的一种常见用例是创建私人变量和方法。例如,考虑以下代码:

function counter() {
  let count = 0;

  return function() {
    count++;
    console.log(count);
  }
}

const increment = counter();

increment(); // logs 1
increment(); // logs 2
increment(); // logs 3

在此示例中,计数器函数返回具有访问计数变量的内部函数。执行内部函数时,它会增加计数变量并记录其值。由于计数变量在计数器函数中声明,因此无法从函数外部访问。这会创建一个私人变量,只能通过封闭才能访问。

封闭也可用于创建记住其上下文的功能。例如,考虑以下代码:

function greeting(name) {
  return function() {
    console.log(`Hello, ${name}!`);
  }
}

const greetJohn = greeting('John');
const greetMary = greeting('Mary');

greetJohn(); // logs "Hello, John!"
greetMary(); // logs "Hello, Mary!"

在此示例中,问候函数返回一个内部函数,该功能可记录传递给外部功能的名称。 GreetJohn和Quartmary变量将引用到通过问候返回的内部函数的引用,当执行它们时,它们会以适当的名称记录一个问候。因为内部函数可以访问名称变量,所以它记得其上下文,即使返回外部功能后也可以记录适当的名称。

结论

封闭是JavaScript中的一个强大概念,可用于创建私人变量和方法以及记住其上下文的功能。通过了解关闭方式以及如何使用它们,您可以编写更有效的代码。