JavaScript功能关闭
#javascript #网络开发人员 #node

什么封闭是做什么?

假设您有这样简单的代码。

let value = 1
function multiply(){
   value = value * 2;
   console.log(value)
}  
multiply() // output: 2
multiply() // output: 4
multiply() // output: 8
console.log(value) // 8

如果您在这里看到我们的全局范围中有一个变量,一个函数乘以乘以*2并将其分配给值变量并安装它。
现在采取另一个代码

function multiply(){
   let value = 1
   value = value * 2;
   console.log(value)
}  
multiply() // output : 2
multiply() // output : 2
console.log(value) // output: ReferenceError: value is not defined

如果您在此处看到我们具有函数范围的变量和一个函数乘以value*2并将其分配给值变量并安装它。

让我们讨论这两个代码有什么区别?

现在讨论可变寿命

  • 在第一个代码变量中具有终身时间的寿命,请关闭窗口或nevigate另一个页面,因为它在全局范围

  • 在第二个代码变量中具有寿命UTIT函数执行。完成执行后,它将被破坏所有变量。由于这个原因,当我在第二代码中安装值时,ReferenceError: value is not defined

我认为,如果您聪明,您已经确定了问题。

在我试图获取更新值时,在第一个代码中,它发生了,因为它在全局范围变量中进行更新,并且我们知道全局范围存在ufiate或关闭窗口,这就是我们得到预期结果的原因。

但是,当我在执行后创建一个函数时,它将删除所有变量和执行步骤,这就是为什么当我尝试获得值时,它将始终获得2。并在全局范围内执行后将其扔掉,以便我们获得更新的值。
让我们来做。

function multiply() {
  let value = 1;
  function mul() {
     value = value * 2;
  }
  mul();  
  return value; 
}
const mul1 = multiply()
const mul2 = multiply()
console.log(mul1, mul2) //output 2 2

仍然无法解决的问题预期4,但是获得2让我们通过return faluible的返回来解决此问题,让我们返回内部/嵌套函数

function multiply () {
  let value = 1;
  function mul() {
      value = value * 2; 
      return value
  }
 return mul
};

const mul = multiply()
console.log(mul()) // 2
console.log(mul()) // 4
console.log(mul()) // 8

因此,最终定义了什么是关闭?

闭合是JavaScript的功能,它允许内部函数访问函数的外部范围。闭合有助于将函数绑定到其外部边界,并在创建函数时自动创建。